package com.example.ui.admin import android.content.Intent import android.net.Uri import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.AccountBalanceWallet import androidx.compose.material.icons.filled.Call import androidx.compose.material.icons.filled.Email import androidx.compose.material.icons.filled.LocationOn import androidx.compose.material.icons.filled.Person import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue 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.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.example.data.model.CustomerUser import com.example.ui.theme.FreshVegGreen import com.example.ui.theme.LoveRedPrimary import com.example.ui.theme.TextPrimary import com.example.ui.theme.TextSecondary import com.example.viewmodel.AdminViewModel @Composable fun AdminCustomerScreen( adminViewModel: AdminViewModel, modifier: Modifier = Modifier ) { val context = LocalContext.current val customers by adminViewModel.allCustomers.collectAsState() Column( modifier = modifier .fillMaxSize() .padding(16.dp) ) { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { Text( text = "REGISTERED CUSTOMERS (${customers.size})", fontWeight = FontWeight.Bold, fontSize = 13.sp, color = TextSecondary ) Surface( color = Color(0xFFEDE7F6), shape = RoundedCornerShape(8.dp) ) { Text( text = "Real-Time Sync", color = Color(0xFF512DA8), fontSize = 10.sp, fontWeight = FontWeight.Bold, modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp) ) } } Spacer(modifier = Modifier.height(12.dp)) if (customers.isEmpty()) { Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center ) { Text(text = "No customers registered yet", color = TextSecondary, fontSize = 14.sp) } } else { LazyColumn( modifier = Modifier.fillMaxSize(), contentPadding = PaddingValues(bottom = 72.dp), verticalArrangement = Arrangement.spacedBy(12.dp) ) { items(customers) { customer -> CustomerDetailCard( customer = customer, onCall = { phone -> val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:$phone")) try { context.startActivity(intent) } catch (_: Exception) {} }, onWhatsApp = { phone -> val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://api.whatsapp.com/send?phone=$phone&text=Hello%20${customer.name},%20regarding%20your%20Love%20Zone%20order")) try { context.startActivity(intent) } catch (_: Exception) {} } ) } } } } } @Composable fun CustomerDetailCard( customer: CustomerUser, onCall: (String) -> Unit, onWhatsApp: (String) -> Unit ) { Card( shape = RoundedCornerShape(16.dp), colors = CardDefaults.cardColors(containerColor = Color.White), elevation = CardDefaults.cardElevation(defaultElevation = 2.dp), modifier = Modifier.fillMaxWidth().testTag("admin_customer_card_${customer.phone}") ) { Column(modifier = Modifier.padding(14.dp)) { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { Row(verticalAlignment = Alignment.CenterVertically) { Box( modifier = Modifier .size(40.dp) .clip(CircleShape) .background(Color(0xFFFFF1F2)), contentAlignment = Alignment.Center ) { Icon( imageVector = Icons.Default.Person, contentDescription = null, tint = LoveRedPrimary, modifier = Modifier.size(22.dp) ) } Spacer(modifier = Modifier.width(10.dp)) Column { Text(text = customer.name, fontWeight = FontWeight.Bold, fontSize = 15.sp, color = TextPrimary) Text(text = customer.phone, fontSize = 12.sp, color = LoveRedPrimary, fontWeight = FontWeight.SemiBold) } } Surface( color = Color(0xFFF1F5F9), shape = RoundedCornerShape(8.dp) ) { Row( modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp), verticalAlignment = Alignment.CenterVertically ) { Icon(Icons.Default.AccountBalanceWallet, contentDescription = null, tint = FreshVegGreen, modifier = Modifier.size(14.dp)) Spacer(modifier = Modifier.width(4.dp)) Text(text = "₹%.1f".format(customer.walletBalance), fontSize = 11.sp, fontWeight = FontWeight.Bold, color = TextPrimary) } } } HorizontalDivider(color = Color(0xFFF1F5F9), modifier = Modifier.padding(vertical = 10.dp)) if (customer.email.isNotBlank()) { Row(verticalAlignment = Alignment.CenterVertically) { Icon(Icons.Default.Email, contentDescription = null, tint = TextSecondary, modifier = Modifier.size(14.dp)) Spacer(modifier = Modifier.width(6.dp)) Text(text = customer.email, fontSize = 12.sp, color = TextSecondary) } Spacer(modifier = Modifier.height(4.dp)) } Row(verticalAlignment = Alignment.Top) { Icon(Icons.Default.LocationOn, contentDescription = null, tint = LoveRedPrimary, modifier = Modifier.size(14.dp).padding(top = 2.dp)) Spacer(modifier = Modifier.width(6.dp)) Text(text = customer.address, fontSize = 12.sp, color = TextSecondary, modifier = Modifier.weight(1f)) } Spacer(modifier = Modifier.height(10.dp)) Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp) ) { OutlinedButton( onClick = { onCall(customer.phone) }, shape = RoundedCornerShape(8.dp), modifier = Modifier.weight(1f).height(34.dp) ) { Icon(Icons.Default.Call, contentDescription = null, tint = LoveRedPrimary, modifier = Modifier.size(14.dp)) Spacer(modifier = Modifier.width(4.dp)) Text("Call Customer", fontSize = 11.sp, fontWeight = FontWeight.Bold, color = TextPrimary) } OutlinedButton( onClick = { onWhatsApp(customer.phone) }, shape = RoundedCornerShape(8.dp), modifier = Modifier.weight(1f).height(34.dp) ) { Text("WhatsApp", fontSize = 11.sp, fontWeight = FontWeight.Bold, color = FreshVegGreen) } } } } }