package com.example.furumi_android.ui.player

import android.content.Intent
import android.graphics.Bitmap
import androidx.activity.compose.BackHandler
import androidx.compose.animation.core.Animatable
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.*
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.lazy.grid.items
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Slider
import androidx.compose.material3.SliderDefaults
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.draw.clip
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.drawscope.Fill
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.example.furumi_android.domain.model.ArtistCard
import com.example.furumi_android.domain.model.PlaylistCard
import com.example.furumi_android.domain.model.ReleaseCard
import com.example.furumi_android.domain.model.TrackCard
import com.example.furumi_android.domain.model.ListeningHistoryItem
import com.example.furumi_android.playback.AudioPlaybackState
import com.example.furumi_android.ui.theme.FurumiBlack
import com.example.furumi_android.ui.theme.FurumiElectricCyan
import com.example.furumi_android.ui.theme.FurumiHotOrange
import com.example.furumi_android.ui.theme.FurumiLine
import com.example.furumi_android.ui.theme.FurumiNeonPink
import com.example.furumi_android.ui.theme.FurumiNeonViolet
import com.example.furumi_android.ui.theme.FurumiSurface
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
import com.example.furumi_android.ui.theme.FurumiTextMuted
import kotlin.math.roundToInt

@Composable
internal fun TrackContextMenu(
    expanded: Boolean,
    isLiked: Boolean,
    onDismiss: () -> Unit,
    onToggleLike: () -> Unit,
    onPlayNext: () -> Unit,
    onPlayLast: () -> Unit,
    onShare: () -> Unit,
    onAddToPlaylist: () -> Unit
) {
    DropdownMenu(
        expanded = expanded,
        onDismissRequest = onDismiss
    ) {
        DropdownMenuItem(
            text = { Text(if (isLiked) "Unlike" else "Like") },
            onClick = onToggleLike
        )
        DropdownMenuItem(
            text = { Text("Play next") },
            onClick = onPlayNext
        )
        DropdownMenuItem(
            text = { Text("Play last") },
            onClick = onPlayLast
        )
        DropdownMenuItem(
            text = { Text("Share") },
            onClick = onShare
        )
        DropdownMenuItem(
            text = { Text("Add to playlist") },
            onClick = onAddToPlaylist
        )
    }
}

@Composable
internal fun AddToPlaylistDialog(
    playlists: List<PlaylistCard>,
    isLoading: Boolean,
    onLoadPlaylists: () -> Unit,
    onPlaylistSelected: (Long) -> Unit,
    onDismiss: () -> Unit
) {
    LaunchedEffect(Unit) {
        onLoadPlaylists()
    }

    Surface(
        modifier = Modifier
            .fillMaxSize()
            .clickable(onClick = onDismiss),
        color = Color.Black.copy(alpha = 0.6f)
    ) {
        Box(
            modifier = Modifier.fillMaxSize(),
            contentAlignment = Alignment.Center
        ) {
            Surface(
                modifier = Modifier
                    .width(300.dp)
                    .clickable(enabled = false, onClick = {}),
                shape = RoundedCornerShape(16.dp),
                color = FurumiSurfaceHigh,
                border = androidx.compose.foundation.BorderStroke(1.dp, FurumiLine)
            ) {
                Column(modifier = Modifier.padding(20.dp)) {
                    Text(
                        text = "Add to playlist",
                        style = MaterialTheme.typography.titleMedium,
                        color = MaterialTheme.colorScheme.onBackground
                    )
                    Spacer(modifier = Modifier.height(16.dp))

                    when {
                        isLoading -> {
                            Box(
                                modifier = Modifier
                                    .fillMaxWidth()
                                    .height(100.dp),
                                contentAlignment = Alignment.Center
                            ) {
                                CircularProgressIndicator(
                                    color = FurumiNeonPink,
                                    strokeWidth = 2.dp,
                                    modifier = Modifier.size(24.dp)
                                )
                            }
                        }
                        playlists.isEmpty() -> {
                            Text(
                                text = "No playlists found",
                                style = MaterialTheme.typography.bodyMedium,
                                color = FurumiTextMuted
                            )
                        }
                        else -> {
                            Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
                                playlists.forEach { playlist ->
                                    Surface(
                                        modifier = Modifier
                                            .fillMaxWidth()
                                            .clip(RoundedCornerShape(8.dp))
                                            .clickable { onPlaylistSelected(playlist.id) },
                                        shape = RoundedCornerShape(8.dp),
                                        color = FurumiSurface,
                                        border = androidx.compose.foundation.BorderStroke(1.dp, FurumiLine)
                                    ) {
                                        Column(modifier = Modifier.padding(12.dp)) {
                                            Text(
                                                text = playlist.title,
                                                style = MaterialTheme.typography.labelLarge,
                                                color = MaterialTheme.colorScheme.onBackground,
                                                maxLines = 1,
                                                overflow = TextOverflow.Ellipsis
                                            )
                                            Text(
                                                text = "${playlist.trackCount} tracks",
                                                style = MaterialTheme.typography.bodyMedium,
                                                color = FurumiTextMuted
                                            )
                                        }
                                    }
                                }
                            }
                        }
                    }

                    Spacer(modifier = Modifier.height(16.dp))
                    Text(
                        text = "Cancel",
                        modifier = Modifier
                            .align(Alignment.End)
                            .clip(RoundedCornerShape(8.dp))
                            .clickable(onClick = onDismiss)
                            .padding(horizontal = 10.dp, vertical = 8.dp),
                        style = MaterialTheme.typography.labelLarge,
                        color = FurumiTextMuted
                    )
                }
            }
        }
    }
}
