package com.example.exvesta.Screans

import android.util.Log
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.selection.selectable
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Divider
import androidx.compose.material3.RadioButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.exvesta.Screans.Responses.MainViewModel
import com.example.exvesta.domain.utils.Constants
import com.example.exvesta.model.Season
import com.example.exvesta.model.Season_dublicate
import com.example.exvesta.model.Style
import com.example.exvesta.model.Style_dublicate
import com.example.exvesta.model.Type
import com.example.exvesta.model.Type_dublicate
import com.example.exvesta.model.Type_subtype
import com.example.exvesta.model.Type_subtype_dublicate
import io.github.jan.supabase.postgrest.from
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

@OptIn(ExperimentalLayoutApi::class)
@Composable
public  fun Filters(   onApplyFilters: (Type_subtype_dublicate?, Season_dublicate?,  Style_dublicate?) -> Unit,
                       onDismiss: () -> Unit) {
    var styledubs by remember { mutableStateOf<List<Style_dublicate>>(listOf()) }
    var subdubtypes by remember { mutableStateOf<List<Type_subtype_dublicate>>(listOf()) }
    var typedubs by remember { mutableStateOf<List<Type_dublicate>>(listOf()) }
    var seasondubs by remember { mutableStateOf<List<Season_dublicate>>(listOf()) }
    var selectedStyle by remember { mutableStateOf<Style_dublicate?>(null) }
    var selectedSubtype by remember { mutableStateOf<Type_subtype_dublicate?>(null) }
    var selectedSeason by remember { mutableStateOf<Season_dublicate?>(null) }

    var selectedsubId by remember { mutableStateOf(0) }
    var selectedseasonId by remember { mutableStateOf(0) }
    val viewModel = MainViewModel()
    LaunchedEffect(Unit) {
        withContext(Dispatchers.IO) {
            subdubtypes = Constants.supabase.from("Type_subtype_dublicate")
                .select().decodeList<Type_subtype_dublicate>()
            typedubs = Constants.supabase.from("Type_dublicate")
                .select().decodeList<Type_dublicate>()
            seasondubs = Constants.supabase.from("Season_dublicate")
                .select().decodeList<Season_dublicate>()
            styledubs = Constants.supabase.from("Style_dublicate")
                .select().decodeList<Style_dublicate>()
            seasondubs.forEach { it ->
                Log.d("ts", it.title_season)
            }
            typedubs.forEach { it ->
                Log.d("ts", it.title_type)
            }
        }
    }

        Column(
            modifier = Modifier
                .fillMaxHeight()
                .fillMaxWidth()
                .background(
                    Brush.verticalGradient(
                        colors = listOf(
                            Color(0xFFF4F4F4),
                            Color(0xFFE7D2A9),
                            Color(0xFFC1A88B),
                            Color(0xFF6F4A48)
                        )
                    )
                ),
            verticalArrangement = Arrangement.Top,
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            Spacer(modifier = Modifier.height(50.dp))

            // Кнопка для закрытия фильтров
            Button(
                onClick = { onDismiss() }, // Закрыть выбор фильтров
                modifier = Modifier.padding(top = 16.dp)
                    .background( Color(0xFFD05656),shape = ButtonDefaults.shape),
                colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent)
            ) {
                Text("Закрыть выбор фильтров")
            }

            Spacer(modifier = Modifier.height(20.dp))

            // Белый бокс с закругленными краями
            Box(
                modifier = Modifier
                    .fillMaxWidth() // Бокс на всю ширину
                    .padding(start = 16.dp, end = 16.dp)
                    .background(
                        color = Color.White,
                        shape = RoundedCornerShape(16.dp) // Закругленные края
                    )
                    .padding(16.dp) // Отступы внутри бокса
            ) {
                // Используем Column для размещения текста и кнопки
                LazyColumn(horizontalAlignment = Alignment.CenterHorizontally) {
                    item {
                        // Текст заголовка
                        Text(
                            text = "Фильтры",
                            fontSize = 16.sp,
                            fontWeight = FontWeight.Medium,
                            color = Color(0xFF92A2B0)
                        )
                        Divider(
                            modifier = Modifier.padding(vertical = 8.dp),
                            color = Color.LightGray,
                            thickness = 1.dp
                        )
                        Spacer(modifier = Modifier.height(10.dp)) // Отступ между текстом и кнопкой

                        // Текст "Сезон"
                        Box(

                            modifier = Modifier
//                                .align(Alignment.Start)
                                .fillMaxWidth()
                        ) {
                            Text("Сезон")


                            FlowRow(
                                modifier = Modifier
                                    .fillMaxWidth()
                                    .padding(10.dp)
                            ) {
                                seasondubs.forEach { seasondub ->
                                    Row(
                                        verticalAlignment = Alignment.CenterVertically,
                                        modifier = Modifier
                                            .padding(4.dp) // Отступы между элементами
                                            .selectable(
                                                selected = (seasondub == selectedSeason),
                                                onClick = { selectedSeason = seasondub }
                                            )
                                    ) {
                                        RadioButton(
                                            selected = (seasondub == selectedSeason),
                                            onClick = { selectedSeason = seasondub }
                                        )
                                        Text(
                                            text = seasondub.title_season,
                                            fontSize = 16.sp,
                                            modifier = Modifier.padding(start = 8.dp),
                                            color = Color(0xFF92A2B0)
                                        )
                                    }
                                }
                            }
                        }
                        Spacer(modifier = Modifier.height(10.dp))
                        Box(

                            modifier = Modifier
//                                .align(Alignment.Start)
                                .fillMaxWidth()

                        ) {
                            Text("Стиль")
                        }
                        Box(

                            modifier = Modifier
//                                .align(Alignment.Start)
                                .fillMaxWidth()
                                .padding(10.dp)
                        ) {
                            FlowRow(
                                modifier = Modifier
                                    .fillMaxWidth()
                                    .padding(10.dp)
                            ) {
                                styledubs.forEach { styledub ->
                                    Box(
                                        modifier = Modifier
                                            .padding(4.dp) // Отступы между элементами
                                            .background(
                                                Color(0xFFF1F1F3),
                                                shape = RoundedCornerShape(20.dp)
                                            )
                                            .width(145.dp)// Задаем одинаковую ширину для всех элементов
                                            .height(38.dp) // Устанавливаем фиксированную высоту для всех элементов
                                    ) {
                                        Row(
                                            verticalAlignment = Alignment.CenterVertically,
                                            modifier = Modifier

                                                .selectable(
                                                    selected = (styledub == selectedStyle),
                                                    onClick = { selectedStyle = styledub }
                                                )
                                        ) {
                                            RadioButton(
                                                selected = (styledub == selectedStyle),
                                                onClick = { selectedStyle = styledub }
                                            )
                                            Text(
                                                text = styledub.title_style,
                                                fontSize = 16.sp,
                                                modifier = Modifier.padding(start = 0.dp), // Отступ слева от радиокнопки
                                                color = Color(0xFF92A2B0)
                                            )
                                        }
                                    }
                                }
                            }
                        }
                        Box(

                            modifier = Modifier
//                                .align(Alignment.Start)
                                .fillMaxWidth()

                        ) {
                            Text("Типы")
                        }

                        FlowRow(
                            modifier = Modifier
                                .fillMaxWidth()
                                .padding(10.dp)
                        )
                        {
                            typedubs.forEach { typedub ->

                                Box(
                                    modifier = Modifier
                                        .padding(4.dp) // Отступы между элементами
                                        .background(
                                            Color(0xFFF1F1F3),
                                            shape = RoundedCornerShape(20.dp)
                                        )
                                        .width(145.dp)// Задаем одинаковую ширину для всех элементов
                                        .height(245.dp) // Устанавливаем фиксированную высоту для всех элементов
                                ) {

                                            Text(text = typedub.title_type)



                                    LazyColumn {
                                        items(
                                            subdubtypes,
                                            key = { subdubtype -> subdubtype.id },
                                        ) { subtypedub ->
                                            if (subtypedub.id_type == typedub.id) {
                                                Row(
                                                    verticalAlignment = Alignment.CenterVertically,
                                                    modifier = Modifier

                                                        .selectable(
                                                            selected = (subtypedub ==  selectedSubtype),
                                                            onClick = { selectedSubtype = subtypedub }
                                                        )
                                                        .padding(top = 14.dp)



                                                ) {
                                                    RadioButton(
                                                        selected = (subtypedub ==  selectedSubtype),
                                                        onClick = { selectedSubtype = subtypedub }
                                                    )
                                                    Text(
                                                        text = subtypedub.sub_type,
                                                        fontSize = 16.sp,
                                                        modifier = Modifier.padding(start = 0.dp), // Отступ слева от радиокнопки
                                                        color = Color(0xFF92A2B0)

                                                    )
                                                }
                                            }

                                        }

                                    }


                                }

                            }



                        }
                        Column(
                                modifier = Modifier
                                    .fillMaxWidth()
                                    .padding(bottom = 50.dp), // Отступ внизу для всего столбца
                        verticalArrangement = Arrangement.Bottom // Располагаем кнопки внизу
                        ) {
                        Button(
                            onClick = {
                                onApplyFilters(
                                    selectedSubtype,
                                    selectedSeason,
                                    selectedStyle
                                )
                            },
                            modifier = Modifier

                                .fillMaxWidth() // Занять всю ширину
                                .height(50.dp)
                                .padding(horizontal = 20.dp)
                                .background(
                                    brush = Brush.horizontalGradient(
                                        colors = listOf(
                                            Color(0xFF6F4A48),
                                            Color(0xFFE7D2A9),
                                        )
                                    ),
                                    shape = ButtonDefaults.shape
                                ),
                            colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent),

                            ) {
                            Text(
                                text = "Применить",
                                fontSize = 16.sp,
                                fontWeight = FontWeight.Medium
                            )
                        }
                    }
                    }
                }

            }
        }

}


@OptIn(ExperimentalLayoutApi::class)
@Composable
public  fun FiltersUser(   onApplyFilter: (Type_subtype?, Season?,  Style?) -> Unit,
                       onDismiss: () -> Unit) {
    var style by remember { mutableStateOf<List<Style>>(listOf()) }
    var subdubtype by remember { mutableStateOf<List<Type_subtype>>(listOf()) }
    var types by remember { mutableStateOf<List<Type>>(listOf()) }
    var season by remember { mutableStateOf<List<Season>>(listOf()) }
    var selectedStyle by remember { mutableStateOf<Style?>(null) }
    var selectedSubtype by remember { mutableStateOf<Type_subtype?>(null) }
    var selectedSeason by remember { mutableStateOf<Season?>(null) }

    var selectedsubId by remember { mutableStateOf(0) }
    var selectedseasonId by remember { mutableStateOf(0) }
    val viewModel = MainViewModel()
    LaunchedEffect(Unit) {
        withContext(Dispatchers.IO) {
            subdubtype = Constants.supabase.from("Type_subtype")
                .select().decodeList<Type_subtype>()
            types = Constants.supabase.from("Type_dublicate")
                .select().decodeList<Type>()
            season = Constants.supabase.from("Season")
                .select().decodeList<Season>()
            style = Constants.supabase.from("Style")
                .select().decodeList<Style>()
            season.forEach { it ->
                Log.d("ts", it.title_season)
            }
            types.forEach { it ->
                Log.d("ts", it.title_type)
            }
        }
    }

    Column(
        modifier = Modifier
            .fillMaxHeight()
            .fillMaxWidth()
            .background(
                Brush.verticalGradient(
                    colors = listOf(
                        Color(0xFFF4F4F4),
                        Color(0xFFE7D2A9),
                        Color(0xFFC1A88B),
                        Color(0xFF6F4A48)
                    )
                )
            ),
        verticalArrangement = Arrangement.Top,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Spacer(modifier = Modifier.height(50.dp))

        // Кнопка для закрытия фильтров
        Button(
            onClick = { onDismiss() }, // Закрыть выбор фильтров
            modifier = Modifier.padding(top = 16.dp)
                .background( Color(0xFFD05656),shape = ButtonDefaults.shape),
            colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent)
        ) {
            Text("Закрыть выбор фильтров")
        }

        Spacer(modifier = Modifier.height(20.dp))

        // Белый бокс с закругленными краями
        Box(
            modifier = Modifier
                .fillMaxWidth() // Бокс на всю ширину
                .padding(start = 16.dp, end = 16.dp)
                .background(
                    color = Color.White,
                    shape = RoundedCornerShape(16.dp) // Закругленные края
                )
                .padding(16.dp) // Отступы внутри бокса
        ) {
            // Используем Column для размещения текста и кнопки
            LazyColumn(horizontalAlignment = Alignment.CenterHorizontally) {
                item {
                    // Текст заголовка
                    Text(
                        text = "Фильтры",
                        fontSize = 16.sp,
                        fontWeight = FontWeight.Medium,
                        color = Color(0xFF92A2B0)
                    )
                    Divider(
                        modifier = Modifier.padding(vertical = 8.dp),
                        color = Color.LightGray,
                        thickness = 1.dp
                    )
                    Spacer(modifier = Modifier.height(10.dp)) // Отступ между текстом и кнопкой

                    // Текст "Сезон"
                    Box(

                        modifier = Modifier
//                                .align(Alignment.Start)
                            .fillMaxWidth()
                    ) {
                        Text("Сезон")


                        FlowRow(
                            modifier = Modifier
                                .fillMaxWidth()
                                .padding(10.dp)
                        ) {
                            season.forEach { seasondub ->
                                Row(
                                    verticalAlignment = Alignment.CenterVertically,
                                    modifier = Modifier
                                        .padding(4.dp) // Отступы между элементами
                                        .selectable(
                                            selected = (seasondub == selectedSeason),
                                            onClick = { selectedSeason = seasondub }
                                        )
                                ) {
                                    RadioButton(
                                        selected = (seasondub == selectedSeason),
                                        onClick = { selectedSeason = seasondub }
                                    )
                                    Text(
                                        text = seasondub.title_season,
                                        fontSize = 16.sp,
                                        modifier = Modifier.padding(start = 8.dp),
                                        color = Color(0xFF92A2B0)
                                    )
                                }
                            }
                        }
                    }
                    Spacer(modifier = Modifier.height(10.dp))
                    Box(

                        modifier = Modifier
//                                .align(Alignment.Start)
                            .fillMaxWidth()

                    ) {
                        Text("Стиль")
                    }
                    Box(

                        modifier = Modifier
//                                .align(Alignment.Start)
                            .fillMaxWidth()
                            .padding(10.dp)
                    ) {
                        FlowRow(
                            modifier = Modifier
                                .fillMaxWidth()
                                .padding(10.dp)
                        ) {
                            style.forEach { styledub ->
                                Box(
                                    modifier = Modifier
                                        .padding(4.dp) // Отступы между элементами
                                        .background(
                                            Color(0xFFF1F1F3),
                                            shape = RoundedCornerShape(20.dp)
                                        )
                                        .width(145.dp)// Задаем одинаковую ширину для всех элементов
                                        .height(38.dp) // Устанавливаем фиксированную высоту для всех элементов
                                ) {
                                    Row(
                                        verticalAlignment = Alignment.CenterVertically,
                                        modifier = Modifier

                                            .selectable(
                                                selected = (styledub == selectedStyle),
                                                onClick = { selectedStyle = styledub }
                                            )
                                    ) {
                                        RadioButton(
                                            selected = (styledub == selectedStyle),
                                            onClick = { selectedStyle = styledub }
                                        )
                                        Text(
                                            text = styledub.title_style,
                                            fontSize = 16.sp,
                                            modifier = Modifier.padding(start = 0.dp), // Отступ слева от радиокнопки
                                            color = Color(0xFF92A2B0)
                                        )
                                    }
                                }
                            }
                        }
                    }
                    Box(

                        modifier = Modifier
//                                .align(Alignment.Start)
                            .fillMaxWidth()

                    ) {
                        Text("Типы")
                    }

                    FlowRow(
                        modifier = Modifier
                            .fillMaxWidth()
                            .padding(10.dp)
                    )
                    {
                        types.forEach { typedub ->

                            Box(
                                modifier = Modifier
                                    .padding(4.dp) // Отступы между элементами
                                    .background(
                                        Color(0xFFF1F1F3),
                                        shape = RoundedCornerShape(20.dp)
                                    )
                                    .width(145.dp)// Задаем одинаковую ширину для всех элементов
                                    .height(245.dp) // Устанавливаем фиксированную высоту для всех элементов
                            ) {

                                Text(text = typedub.title_type)



                                LazyColumn {
                                    items(
                                        subdubtype,
                                        key = { subdubtype -> subdubtype.id },
                                    ) { subtypedub ->
                                        if (subtypedub.id_type == typedub.id) {
                                            Row(
                                                verticalAlignment = Alignment.CenterVertically,
                                                modifier = Modifier

                                                    .selectable(
                                                        selected = (subtypedub ==  selectedSubtype),
                                                        onClick = { selectedSubtype = subtypedub }
                                                    )
                                                    .padding(top = 14.dp)



                                            ) {
                                                RadioButton(
                                                    selected = (subtypedub ==  selectedSubtype),
                                                    onClick = { selectedSubtype = subtypedub }
                                                )
                                                Text(
                                                    text = subtypedub.sub_type,
                                                    fontSize = 16.sp,
                                                    modifier = Modifier.padding(start = 0.dp), // Отступ слева от радиокнопки
                                                    color = Color(0xFF92A2B0)

                                                )
                                            }
                                        }

                                    }

                                }


                            }

                        }



                    }
                    Column(
                            modifier = Modifier
                                .fillMaxWidth()
                                .padding(bottom = 50.dp), // Отступ внизу для всего столбца
                    verticalArrangement = Arrangement.Bottom // Располагаем кнопки внизу
                    ){
                    Button(
                        onClick = { onApplyFilter(selectedSubtype, selectedSeason, selectedStyle) },
                        modifier = Modifier

                            .fillMaxWidth() // Занять всю ширину
                            .height(50.dp)
                            .padding(horizontal = 20.dp)
                            .background(
                                brush = Brush.horizontalGradient(
                                    colors = listOf(
                                        Color(0xFF6F4A48),
                                        Color(0xFFE7D2A9),
                                    )
                                ),
                                shape = ButtonDefaults.shape
                            ),
                        colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent),

                        ) {
                        Text(
                            text = "Применить",
                            fontSize = 16.sp,
                            fontWeight = FontWeight.Medium
                        )
                    }
                }
                }

            }

        }
    }

}