package components import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.* import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp // Dummy-Datenklasse für Turnier-Einträge (wird später durch echtes Domain-Model ersetzt) data class TournamentData( val id: String, val date: String, val title: String, val location: String ) @Composable fun TournamentCard(data: TournamentData) { OutlinedCard( modifier = Modifier.fillMaxWidth(), ) { Row( modifier = Modifier .fillMaxWidth() .padding(16.dp), verticalAlignment = Alignment.CenterVertically ) { // Left: Logo Placeholder Surface( modifier = Modifier.size(100.dp), color = MaterialTheme.colorScheme.surfaceVariant, shape = MaterialTheme.shapes.medium ) { Box(contentAlignment = Alignment.Center) { Text( "URFV\nLogo", style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant ) } } Spacer(modifier = Modifier.width(24.dp)) // Middle: Info Column( modifier = Modifier.weight(1f), horizontalAlignment = Alignment.CenterHorizontally ) { Text( text = data.title, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold ) Spacer(modifier = Modifier.height(4.dp)) Text( text = "${data.location} ${data.date}", style = MaterialTheme.typography.bodyMedium ) Spacer(modifier = Modifier.height(4.dp)) Text( text = "Turnier-Nr.:${data.id}", style = MaterialTheme.typography.bodyMedium ) } Spacer(modifier = Modifier.width(24.dp)) // Right: Actions Column( verticalArrangement = Arrangement.spacedBy(8.dp), modifier = Modifier.width(200.dp) ) { OutlinedButton( onClick = { /* TODO */ }, modifier = Modifier.fillMaxWidth() ) { Text("Ausschreibung") } OutlinedButton( onClick = { /* TODO */ }, modifier = Modifier.fillMaxWidth() ) { Text("Nennen") } OutlinedButton( onClick = { /* TODO */ }, modifier = Modifier.fillMaxWidth() ) { Text("Start- Ergebnislisten") } } } } } @Composable fun ToggleRow(label: String, isOnline: Boolean, isInteractive: Boolean = false) { Surface( border = BorderStroke(1.dp, MaterialTheme.colorScheme.outlineVariant), shape = MaterialTheme.shapes.small, modifier = Modifier.fillMaxWidth().height(40.dp), color = if (isInteractive) MaterialTheme.colorScheme.surface else MaterialTheme.colorScheme.surfaceVariant ) { Row( modifier = Modifier.fillMaxSize().padding(horizontal = 12.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween ) { Text(label, style = MaterialTheme.typography.bodyMedium) Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) { val statusColor = if (isOnline) Color(0xFF4CAF50) else Color(0xFF9E9E9E) Surface( modifier = Modifier.size(16.dp), shape = CircleShape, color = statusColor ) {} if (isInteractive) { Surface( border = BorderStroke(1.dp, MaterialTheme.colorScheme.outline), modifier = Modifier.width(40.dp).height(24.dp) ) { Box(contentAlignment = Alignment.Center) { Text(if (isOnline) "on" else "off", style = MaterialTheme.typography.labelSmall) } } } else { Text( if (isOnline) "Online" else "Offline", style = MaterialTheme.typography.labelSmall, modifier = Modifier.width(40.dp), textAlign = TextAlign.Center ) } } } } }