package com.aistudio.bonjuteri.jwlry.ui.screens.admin import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column 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.grid.GridCells import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.automirrored.filled.ArrowForwardIos import androidx.compose.material.icons.filled.Category import androidx.compose.material.icons.filled.Diamond import androidx.compose.material.icons.filled.Group import androidx.compose.material.icons.filled.Image import androidx.compose.material.icons.filled.Inventory import androidx.compose.material.icons.filled.MonetizationOn import androidx.compose.material.icons.filled.PendingActions import androidx.compose.material.icons.filled.ShoppingBag import androidx.compose.material.icons.filled.Warning import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults 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.graphics.vector.ImageVector 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.aistudio.bonjuteri.jwlry.data.AdminDashboardMetrics import com.aistudio.bonjuteri.jwlry.model.Product import com.aistudio.bonjuteri.jwlry.ui.theme.ErrorRed import com.aistudio.bonjuteri.jwlry.ui.theme.GoldDark import com.aistudio.bonjuteri.jwlry.ui.theme.GoldPrimary import com.aistudio.bonjuteri.jwlry.ui.theme.GoldSubtle import com.aistudio.bonjuteri.jwlry.ui.theme.InfoBlue import com.aistudio.bonjuteri.jwlry.ui.theme.MutedGrey import com.aistudio.bonjuteri.jwlry.ui.theme.OffWhite import com.aistudio.bonjuteri.jwlry.ui.theme.PrimaryBlack import com.aistudio.bonjuteri.jwlry.ui.theme.PureWhite import com.aistudio.bonjuteri.jwlry.ui.theme.SuccessGreen import com.aistudio.bonjuteri.jwlry.ui.theme.WarningAmber enum class AdminSection { DASHBOARD, PRODUCTS, CATEGORIES, ORDERS, BANNERS } @OptIn(ExperimentalMaterial3Api::class) @Composable fun AdminDashboardScreen( metrics: AdminDashboardMetrics, onNavigateSection: (AdminSection) -> Unit, onBackClick: () -> Unit, modifier: Modifier = Modifier ) { Scaffold( topBar = { TopAppBar( title = { Column { Text("Yönetim Paneli", fontWeight = FontWeight.Bold) Text("BONJUTERİ Yönetim & Operasyon", style = MaterialTheme.typography.labelSmall.copy(color = GoldDark)) } }, navigationIcon = { IconButton(onClick = onBackClick) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Mağazaya Dön") } }, colors = TopAppBarDefaults.topAppBarColors(containerColor = PureWhite) ) } ) { padding -> LazyVerticalGrid( columns = GridCells.Fixed(2), modifier = modifier .fillMaxSize() .padding(padding) .background(OffWhite) .padding(14.dp), horizontalArrangement = Arrangement.spacedBy(10.dp), verticalArrangement = Arrangement.spacedBy(10.dp) ) { // Metrics Header item(span = { GridItemSpan(2) }) { Text( text = "Performans Göstergeleri", style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.Bold, color = PrimaryBlack), modifier = Modifier.padding(vertical = 4.dp) ) } // Metric: Toplam Satış item(span = { GridItemSpan(2) }) { Card( modifier = Modifier.fillMaxWidth(), colors = CardDefaults.cardColors(containerColor = PrimaryBlack), shape = RoundedCornerShape(14.dp) ) { Row( modifier = Modifier.padding(16.dp), verticalAlignment = Alignment.CenterVertically ) { Box( modifier = Modifier .size(48.dp) .background(GoldPrimary, CircleShape), contentAlignment = Alignment.Center ) { Icon(Icons.Filled.MonetizationOn, contentDescription = null, tint = PureWhite, modifier = Modifier.size(26.dp)) } Spacer(modifier = Modifier.width(14.dp)) Column { Text("Gerçekleşen Satış Toplamı", color = GoldSubtle, fontSize = 12.sp, fontWeight = FontWeight.Medium) Text( text = Product.formatCurrency(metrics.totalSalesAmount), color = PureWhite, fontSize = 22.sp, fontWeight = FontWeight.Black ) } } } } // Metric 1: Toplam Ürün item { MetricCard( title = "Toplam Ürün", value = metrics.totalProducts.toString(), icon = Icons.Filled.Inventory, iconTint = InfoBlue ) } // Metric 2: Toplam Sipariş item { MetricCard( title = "Toplam Sipariş", value = metrics.totalOrders.toString(), icon = Icons.Filled.ShoppingBag, iconTint = GoldPrimary ) } // Metric 3: Bekleyen Sipariş item { MetricCard( title = "Bekleyen Sipariş", value = metrics.pendingOrders.toString(), icon = Icons.Filled.PendingActions, iconTint = WarningAmber ) } // Metric 4: Toplam Kullanıcı item { MetricCard( title = "Kayıtlı Kullanıcı", value = metrics.totalUsers.toString(), icon = Icons.Filled.Group, iconTint = SuccessGreen ) } // Metric 5: Düşük Stok Uyarısı item(span = { GridItemSpan(2) }) { Card( modifier = Modifier.fillMaxWidth(), colors = CardDefaults.cardColors( containerColor = if (metrics.lowStockCount > 0) Color(0xFFFFF4E5) else PureWhite ), shape = RoundedCornerShape(12.dp) ) { Row( modifier = Modifier.padding(14.dp), verticalAlignment = Alignment.CenterVertically ) { Icon( imageVector = Icons.Filled.Warning, contentDescription = null, tint = if (metrics.lowStockCount > 0) WarningAmber else SuccessGreen, modifier = Modifier.size(24.dp) ) Spacer(modifier = Modifier.width(12.dp)) Column(modifier = Modifier.weight(1f)) { Text( text = "Düşük Stoklu Ürünler", fontWeight = FontWeight.Bold, fontSize = 14.sp ) Text( text = if (metrics.lowStockCount > 0) "${metrics.lowStockCount} ürün kritik stok seviyesinde (< 5 adet)" else "Tüm ürünlerin stok durumu yeterli seviyede", color = MutedGrey, fontSize = 12.sp ) } } } } // Management Navigation Section item(span = { GridItemSpan(2) }) { Spacer(modifier = Modifier.height(8.dp)) Text( text = "Yönetim Modülleri", style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.Bold, color = PrimaryBlack), modifier = Modifier.padding(vertical = 4.dp) ) } // Module: Ürün Yönetimi item(span = { GridItemSpan(2) }) { AdminModuleCard( title = "Ürün Yönetimi", subtitle = "Ürün ekle, düzenle, sil, fiyat & stok güncelle", icon = Icons.Filled.Diamond, onClick = { onNavigateSection(AdminSection.PRODUCTS) }, testTag = "admin_nav_products" ) } // Module: Sipariş Yönetimi item(span = { GridItemSpan(2) }) { AdminModuleCard( title = "Sipariş Yönetimi", subtitle = "Siparişleri incele, kargo & durum güncelle", icon = Icons.Filled.ShoppingBag, onClick = { onNavigateSection(AdminSection.ORDERS) }, testTag = "admin_nav_orders" ) } // Module: Kategori Yönetimi item(span = { GridItemSpan(2) }) { AdminModuleCard( title = "Kategori Yönetimi", subtitle = "Kategori ekle, sırala ve düzenle", icon = Icons.Filled.Category, onClick = { onNavigateSection(AdminSection.CATEGORIES) }, testTag = "admin_nav_categories" ) } // Module: Banner & Kampanya item(span = { GridItemSpan(2) }) { AdminModuleCard( title = "Banner & Kampanya Yönetimi", subtitle = "Ana sayfa vitrin bannerlarını yönet", icon = Icons.Filled.Image, onClick = { onNavigateSection(AdminSection.BANNERS) }, testTag = "admin_nav_banners" ) } } } } @Composable private fun MetricCard( title: String, value: String, icon: ImageVector, iconTint: Color ) { Card( colors = CardDefaults.cardColors(containerColor = PureWhite), shape = RoundedCornerShape(12.dp), elevation = CardDefaults.cardElevation(defaultElevation = 1.dp) ) { Column(modifier = Modifier.padding(14.dp)) { Icon(imageVector = icon, contentDescription = title, tint = iconTint, modifier = Modifier.size(24.dp)) Spacer(modifier = Modifier.height(10.dp)) Text(text = value, style = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.Black)) Text(text = title, style = MaterialTheme.typography.bodySmall.copy(color = MutedGrey)) } } } @Composable private fun AdminModuleCard( title: String, subtitle: String, icon: ImageVector, onClick: () -> Unit, testTag: String ) { Card( modifier = Modifier .fillMaxWidth() .clip(RoundedCornerShape(12.dp)) .clickable { onClick() } .testTag(testTag), colors = CardDefaults.cardColors(containerColor = PureWhite), elevation = CardDefaults.cardElevation(defaultElevation = 1.dp) ) { Row( modifier = Modifier.padding(16.dp), verticalAlignment = Alignment.CenterVertically ) { Box( modifier = Modifier .size(42.dp) .background(GoldSubtle, CircleShape), contentAlignment = Alignment.Center ) { Icon(imageVector = icon, contentDescription = null, tint = GoldPrimary, modifier = Modifier.size(22.dp)) } Spacer(modifier = Modifier.width(14.dp)) Column(modifier = Modifier.weight(1f)) { Text(text = title, fontWeight = FontWeight.Bold, fontSize = 14.sp) Text(text = subtitle, color = MutedGrey, fontSize = 11.sp) } Icon( imageVector = Icons.AutoMirrored.Filled.ArrowForwardIos, contentDescription = null, tint = MutedGrey, modifier = Modifier.size(14.dp) ) } } }