package com.aistudio.bonjuteri.jwlry.ui.components import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Diamond import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults 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.draw.clip import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil.compose.AsyncImage import coil.request.ImageRequest import com.aistudio.bonjuteri.jwlry.model.Banner import com.aistudio.bonjuteri.jwlry.ui.theme.GoldPrimary import com.aistudio.bonjuteri.jwlry.ui.theme.PrimaryBlack import com.aistudio.bonjuteri.jwlry.ui.theme.PureWhite @Composable fun BannerCarousel( banners: List, onBannerClick: (Banner) -> Unit, modifier: Modifier = Modifier ) { if (banners.isEmpty()) { // Fallback welcoming hero card Card( modifier = modifier .fillMaxWidth() .padding(horizontal = 16.dp, vertical = 8.dp) .height(140.dp), shape = RoundedCornerShape(16.dp), colors = CardDefaults.cardColors(containerColor = PrimaryBlack) ) { Box( modifier = Modifier .fillMaxSize() .background( Brush.linearGradient( listOf(Color(0xFF1F1C18), Color(0xFF0F0E0C)) ) ) .padding(20.dp), contentAlignment = Alignment.CenterStart ) { Column(modifier = Modifier.fillMaxWidth(0.7f)) { Text( text = "BONJUTERİ BUTİK", color = GoldPrimary, fontSize = 11.sp, fontWeight = FontWeight.Bold, letterSpacing = 1.2.sp ) Spacer(modifier = Modifier.height(4.dp)) Text( text = "Işıltınızı Tamamlayan Özel Tasarımlar", color = PureWhite, fontSize = 17.sp, fontWeight = FontWeight.Bold, lineHeight = 22.sp ) } Icon( imageVector = Icons.Outlined.Diamond, contentDescription = null, tint = GoldPrimary.copy(alpha = 0.25f), modifier = Modifier .size(80.dp) .align(Alignment.CenterEnd) ) } } return } val pagerState = rememberPagerState(pageCount = { banners.size }) Column(modifier = modifier.fillMaxWidth()) { HorizontalPager( state = pagerState, modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp, vertical = 6.dp) .height(150.dp) ) { page -> val banner = banners[page] Card( modifier = Modifier .fillMaxSize() .clip(RoundedCornerShape(16.dp)) .clickable { onBannerClick(banner) }, shape = RoundedCornerShape(16.dp), elevation = CardDefaults.cardElevation(defaultElevation = 2.dp) ) { Box(modifier = Modifier.fillMaxSize()) { if (banner.imageUrl.isNotBlank()) { AsyncImage( model = ImageRequest.Builder(LocalContext.current) .data(banner.imageUrl) .crossfade(true) .build(), contentDescription = banner.title, modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop ) } else { Box( modifier = Modifier .fillMaxSize() .background( Brush.linearGradient( listOf(Color(0xFF23201C), Color(0xFF141210)) ) ) ) } // Elegant gradient scrim for text readability Box( modifier = Modifier .fillMaxSize() .background( Brush.verticalGradient( listOf(Color.Transparent, Color(0xCC000000)) ) ) .padding(16.dp), contentAlignment = Alignment.BottomStart ) { Column { if (banner.subtitle.isNotBlank()) { Text( text = banner.subtitle.uppercase(), color = GoldPrimary, fontSize = 10.sp, fontWeight = FontWeight.Bold, letterSpacing = 1.sp ) } Text( text = banner.title, color = PureWhite, fontSize = 16.sp, fontWeight = FontWeight.Bold ) } } } } } // Indicator dots if (banners.size > 1) { Row( modifier = Modifier .fillMaxWidth() .padding(top = 4.dp), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically ) { repeat(banners.size) { index -> val isSelected = pagerState.currentPage == index Box( modifier = Modifier .padding(horizontal = 3.dp) .size(if (isSelected) 8.dp else 5.dp) .background( color = if (isSelected) GoldPrimary else Color.LightGray, shape = CircleShape ) ) } } } } }