package com.example.ui.components import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Info import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Divider import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier 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.MediaItemData import com.example.ui.theme.AccentViolet import com.example.ui.theme.DividerSubtle import com.example.ui.theme.SurfaceElevated import com.example.ui.theme.TextPrimary import com.example.ui.theme.TextSecondary import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @Composable fun MediaDetailDialog( item: MediaItemData, onDismiss: () -> Unit ) { val dateFormatted = rememberDate(item.dateAdded) AlertDialog( onDismissRequest = onDismiss, confirmButton = { Button( onClick = onDismiss, colors = ButtonDefaults.buttonColors(containerColor = AccentViolet), modifier = Modifier.testTag("media_detail_close_btn") ) { Text("Close", color = androidx.compose.ui.graphics.Color.Black, fontWeight = FontWeight.Bold) } }, title = { Row(verticalAlignment = Alignment.CenterVertically) { Icon( imageVector = Icons.Default.Info, contentDescription = null, tint = AccentViolet ) Spacer(modifier = Modifier.width(8.dp)) Text( text = "Media Details", color = TextPrimary, style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.Bold ) } }, text = { Column( modifier = Modifier .fillMaxWidth() .padding(vertical = 4.dp) ) { DetailRow("Title", item.title) DetailRow("Type", if (item.isVideo) "Video" else "Audio") if (!item.isVideo) { DetailRow("Artist", item.artist) DetailRow("Album", item.album) } DetailRow("Duration", item.formattedDuration) if (item.isVideo && item.width > 0 && item.height > 0) { DetailRow("Resolution", "${item.width} x ${item.height}") } DetailRow("Size", item.formattedSize) DetailRow("MIME Type", item.mimeType.ifBlank { "Unknown" }) DetailRow("Folder", item.folderName) if (item.relativePath.isNotBlank()) { DetailRow("Location", item.relativePath) } DetailRow("Date Added", dateFormatted) } }, containerColor = SurfaceElevated, shape = RoundedCornerShape(16.dp), modifier = Modifier.testTag("media_detail_dialog") ) } @Composable private fun DetailRow(label: String, value: String) { Column(modifier = Modifier.padding(vertical = 4.dp)) { Text( text = label, color = TextSecondary, fontSize = 11.sp, fontWeight = FontWeight.SemiBold ) Text( text = value, color = TextPrimary, fontSize = 13.sp, fontWeight = FontWeight.Normal ) Spacer(modifier = Modifier.height(2.dp)) HorizontalDivider(color = DividerSubtle.copy(alpha = 0.5f), thickness = 0.5.dp) } } private fun rememberDate(timestampSec: Long): String { if (timestampSec <= 0) return "Recent" val millis = if (timestampSec < 10000000000L) timestampSec * 1000L else timestampSec val sdf = SimpleDateFormat("MMM dd, yyyy HH:mm", Locale.getDefault()) return sdf.format(Date(millis)) }