package com.example.ui.components import android.net.Uri import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Fastfood import androidx.compose.material.icons.filled.Remove import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil.compose.AsyncImage import coil.request.ImageRequest import com.example.R import com.example.ui.theme.FreshVegGreen import com.example.ui.theme.LoveRedPrimary import com.example.ui.theme.NonVegRed @Composable fun VegNonVegBadge( isVeg: Boolean, modifier: Modifier = Modifier, size: Dp = 16.dp ) { val borderColor = if (isVeg) FreshVegGreen else NonVegRed val dotColor = if (isVeg) FreshVegGreen else NonVegRed Box( modifier = modifier .size(size) .border(1.5.dp, borderColor, RoundedCornerShape(3.dp)) .padding(3.dp), contentAlignment = Alignment.Center ) { Box( modifier = Modifier .fillMaxSize() .background(dotColor, CircleShape) ) } } @Composable fun FoodItemImage( imageUri: String, contentDescription: String, modifier: Modifier = Modifier, contentScale: ContentScale = ContentScale.Crop ) { val context = LocalContext.current Box( modifier = modifier.background(Color(0xFFF1F5F9)), contentAlignment = Alignment.Center ) { when { imageUri == "img_special_biryani" -> { Image( painter = painterResource(id = R.drawable.img_special_biryani), contentDescription = contentDescription, modifier = Modifier.fillMaxSize(), contentScale = contentScale ) } imageUri == "img_food_banner" -> { Image( painter = painterResource(id = R.drawable.img_food_banner), contentDescription = contentDescription, modifier = Modifier.fillMaxSize(), contentScale = contentScale ) } imageUri == "logo_love_zone" -> { Image( painter = painterResource(id = R.drawable.logo_love_zone), contentDescription = contentDescription, modifier = Modifier.fillMaxSize(), contentScale = contentScale ) } imageUri.isNotBlank() -> { AsyncImage( model = ImageRequest.Builder(context) .data(if (imageUri.startsWith("content://") || imageUri.startsWith("file://")) Uri.parse(imageUri) else imageUri) .crossfade(true) .build(), contentDescription = contentDescription, modifier = Modifier.fillMaxSize(), contentScale = contentScale, error = painterResource(id = R.drawable.logo_love_zone) ) } else -> { // Fallback elegant Love Zone dish placeholder Image( painter = painterResource(id = R.drawable.logo_love_zone), contentDescription = contentDescription, modifier = Modifier.fillMaxSize(), contentScale = contentScale ) } } } } @Composable fun QuantityStepper( quantity: Int, onIncrement: () -> Unit, onDecrement: () -> Unit, modifier: Modifier = Modifier ) { Surface( modifier = modifier.testTag("quantity_stepper"), shape = RoundedCornerShape(8.dp), color = Color(0xFFFFF1F2), border = androidx.compose.foundation.BorderStroke(1.dp, LoveRedPrimary) ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(horizontal = 4.dp, vertical = 2.dp) ) { IconButton( onClick = onDecrement, modifier = Modifier.size(28.dp).testTag("stepper_decrement") ) { Icon( imageVector = Icons.Default.Remove, contentDescription = "Decrease", tint = LoveRedPrimary, modifier = Modifier.size(16.dp) ) } Text( text = "$quantity", color = LoveRedPrimary, fontWeight = FontWeight.Bold, fontSize = 14.sp, modifier = Modifier.padding(horizontal = 6.dp) ) IconButton( onClick = onIncrement, modifier = Modifier.size(28.dp).testTag("stepper_increment") ) { Icon( imageVector = Icons.Default.Add, contentDescription = "Increase", tint = LoveRedPrimary, modifier = Modifier.size(16.dp) ) } } } }