package com.sp365.calendar.components import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import java.time.LocalDate import java.time.format.TextStyle import java.util.Locale @Composable fun MonthView( startOfMonth: LocalDate, currentDate: LocalDate, onDateSelected: (LocalDate) -> Unit ) { val daysInMonth = startOfMonth.lengthOfMonth() val startOffset = (startOfMonth.dayOfWeek.value % 7 + 6) % 7 // Số ô trống từ đầu tháng // Tạo các ngày của tháng trước đó để lấp đầy tuần đầu tiên (nếu cần) val previousMonthEnd = startOfMonth.minusDays(1) val previousMonthDays = (0 until startOffset).map { previousMonthEnd.minusDays(it.toLong()) }.reversed() // Tạo danh sách các ngày trong tháng hiện tại val currentMonthDays = (1..daysInMonth).map { startOfMonth.plusDays((it - 1).toLong()) } // Tạo các ngày của tháng kế tiếp để lấp đầy hàng cuối cùng (nếu cần) val totalCells = 35 // Đảm bảo có đủ 6 hàng, mỗi hàng có 7 ngày val nextMonthDaysNeeded = totalCells - (previousMonthDays.size + currentMonthDays.size) val nextMonthDays = (1..nextMonthDaysNeeded).map { startOfMonth.plusMonths(1).withDayOfMonth(it) } // Kết hợp tất cả các ngày lại val allDays = previousMonthDays + currentMonthDays + nextMonthDays // Hiển thị các ngày trong tháng theo dạng lưới Column( modifier = Modifier.fillMaxWidth() ) { // Tiêu đề tháng (tên tháng và năm) Text( text = startOfMonth.month.getDisplayName( TextStyle.FULL, Locale.getDefault() ) + " " + startOfMonth.year, modifier = Modifier .fillMaxWidth() .padding(8.dp), textAlign = TextAlign.Center ) allDays.chunked(7).forEach { week -> Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceAround ) { week.forEach { date -> DayItem( date = date, isSelected = date == currentDate, isToday = date == LocalDate.now(), onClick = { onDateSelected(date) } ) } } } } }