package com.craigvg.lichun_android.ui.screens.home.components import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape 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.PlayArrow import androidx.compose.material.icons.filled.Remove import androidx.compose.material3.* 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.unit.dp import com.craigvg.lichun_android.domain.models.GameSpeedScale import com.craigvg.lichun_android.ui.theme.AppColors import com.craigvg.lichun_android.ui.theme.AppSpacing import com.craigvg.lichun_android.ui.theme.AppTypography /** * Speed selector (Tier 3 polish): a single unified named scale. * * The minus/plus buttons step through [GameSpeedScale.allLevels] (raw server * tick values), the pip meter and the named label (Slow / Normal / Fast / * Instant) describe the SAME underlying scale. [onSpeedChange] receives the raw * server tick value to send via the `speed` command. */ @Composable fun SpeedButtonsView( gameSpeed: Int, onSpeedChange: (Int) -> Unit ) { val pipLevel = GameSpeedScale.pipLevel(gameSpeed) Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(AppSpacing.sm) ) { StepButton( icon = Icons.Default.Remove, contentDescription = "Slow down time", onClick = { onSpeedChange(GameSpeedScale.slower(gameSpeed)) } ) // Visual pip meter — same scale as the named label in GameControlsCard. Row( modifier = Modifier .weight(1f) .clip(RoundedCornerShape(AppSpacing.smallCornerRadius)) .background(AppColors.surfaceSubtle) .padding(vertical = 10.dp), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically ) { repeat(GameSpeedScale.allLevels.size) { index -> Icon( imageVector = Icons.Default.PlayArrow, contentDescription = null, tint = if (index < pipLevel) AppColors.primary else AppColors.disabledText.copy(alpha = 0.5f), modifier = Modifier.size(14.dp) ) } } StepButton( icon = Icons.Default.Add, contentDescription = "Speed up time", onClick = { onSpeedChange(GameSpeedScale.faster(gameSpeed)) } ) } } @Composable private fun StepButton( icon: androidx.compose.ui.graphics.vector.ImageVector, contentDescription: String, onClick: () -> Unit ) { Box( modifier = Modifier .size(40.dp) .clip(CircleShape) .background(AppColors.secondary.copy(alpha = 0.2f)), contentAlignment = Alignment.Center ) { IconButton(onClick = onClick) { Icon(icon, contentDescription = contentDescription, tint = AppColors.secondaryDark, modifier = Modifier.size(20.dp)) } } }