package com.example.ui.components import androidx.compose.foundation.clickable 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.lazy.LazyColumn import androidx.compose.foundation.lazy.items 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.PlaylistAdd import androidx.compose.material.icons.filled.QueueMusic import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color 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.db.PlaylistEntity 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 @Composable fun CreatePlaylistDialog( onDismiss: () -> Unit, onConfirm: (String) -> Unit ) { var playlistName by remember { mutableStateOf("") } AlertDialog( onDismissRequest = onDismiss, confirmButton = { Button( onClick = { if (playlistName.isNotBlank()) { onConfirm(playlistName) onDismiss() } }, enabled = playlistName.isNotBlank(), colors = ButtonDefaults.buttonColors(containerColor = AccentViolet), modifier = Modifier.testTag("create_playlist_confirm_btn") ) { Text("Create", color = Color.Black, fontWeight = FontWeight.Bold) } }, dismissButton = { TextButton(onClick = onDismiss) { Text("Cancel", color = TextSecondary) } }, title = { Row(verticalAlignment = Alignment.CenterVertically) { Icon(imageVector = Icons.Default.PlaylistAdd, contentDescription = null, tint = AccentViolet) Spacer(modifier = Modifier.width(8.dp)) Text("New Playlist", color = TextPrimary, fontWeight = FontWeight.Bold) } }, text = { Column { Text("Enter playlist name", color = TextSecondary, fontSize = 13.sp) Spacer(modifier = Modifier.height(12.dp)) OutlinedTextField( value = playlistName, onValueChange = { playlistName = it }, singleLine = true, placeholder = { Text("e.g. Chill Beats", color = TextSecondary) }, colors = OutlinedTextFieldDefaults.colors( focusedBorderColor = AccentViolet, unfocusedBorderColor = DividerSubtle, focusedTextColor = TextPrimary, unfocusedTextColor = TextPrimary ), modifier = Modifier .fillMaxWidth() .testTag("playlist_name_input") ) } }, containerColor = SurfaceElevated, shape = RoundedCornerShape(16.dp), modifier = Modifier.testTag("create_playlist_dialog") ) } @Composable fun AddToPlaylistDialog( item: MediaItemData, playlists: List, onCreateNewClick: () -> Unit, onSelectPlaylist: (Long) -> Unit, onDismiss: () -> Unit ) { AlertDialog( onDismissRequest = onDismiss, confirmButton = {}, dismissButton = { TextButton(onClick = onDismiss) { Text("Cancel", color = TextSecondary) } }, title = { Text("Add to Playlist", color = TextPrimary, fontWeight = FontWeight.Bold) }, text = { Column(modifier = Modifier.fillMaxWidth()) { Row( modifier = Modifier .fillMaxWidth() .clickable { onDismiss() onCreateNewClick() } .padding(vertical = 12.dp), verticalAlignment = Alignment.CenterVertically ) { Icon(imageVector = Icons.Default.Add, contentDescription = null, tint = AccentViolet) Spacer(modifier = Modifier.width(12.dp)) Text("Create New Playlist", color = AccentViolet, fontWeight = FontWeight.SemiBold) } if (playlists.isEmpty()) { Text( text = "No playlists created yet.", color = TextSecondary, fontSize = 13.sp, modifier = Modifier.padding(vertical = 8.dp) ) } else { LazyColumn(modifier = Modifier.fillMaxWidth()) { items(playlists) { pl -> Row( modifier = Modifier .fillMaxWidth() .clickable { onSelectPlaylist(pl.playlistId) onDismiss() } .padding(vertical = 10.dp), verticalAlignment = Alignment.CenterVertically ) { Icon(imageVector = Icons.Default.QueueMusic, contentDescription = null, tint = TextSecondary) Spacer(modifier = Modifier.width(12.dp)) Text(text = pl.name, color = TextPrimary, fontSize = 14.sp) } } } } } }, containerColor = SurfaceElevated, shape = RoundedCornerShape(16.dp), modifier = Modifier.testTag("add_to_playlist_dialog") ) }