use std::sync::{Arc, OnceLock};

use eframe::egui::{self, mutex::RwLock, vec2, Button, Color32, Label, Sense, Stroke, TextEdit};
use egui_flex::{item, Flex};

use crate::tabs::lectures::{get_lectures, lec_name};

use super::{act_hours, act_lec, add_act, filtered_lectures};

pub fn show_lectures() -> &'static Arc<RwLock<bool>> {
    static ACT_LEC: OnceLock<Arc<RwLock<bool>>> = OnceLock::new();
    ACT_LEC.get_or_init(|| Arc::new(RwLock::new(false)))
}

// fn filter_lectures() -> &'static Arc<RwLock<String>> {
//     static LECTURES: OnceLock<Arc<RwLock<String>>> = OnceLock::new();
//     LECTURES.get_or_init(|| Arc::new(RwLock::new("".to_string())))
// }
pub fn set_lecture_filter() {
    std::thread::spawn(move || {
        let f = &*lec_name().read();
        let f = &*f
            .replace('i', "İ")
            // .replace('ı', "I")
            // .replace('I', "ı")
            // .replace('İ', "i")
            .to_uppercase();
        let lecs = get_lectures()
            .read()
            .clone()
            .into_iter()
            .filter(|l| l.1.name.replace('i', "İ").to_uppercase().contains(&f));
        *filtered_lectures().write() = lecs.map(|l| l.1).collect();
    });
}
pub fn select_lecture_ui(ui: &mut egui::Ui) {
    egui::Window::new("Lectures Ui")
        .open(&mut *show_lectures().write())
        .show(ui.ctx(), |ui| {
            ui.label("Ders Seçin");
            if ui
                .add(TextEdit::singleline(&mut *lec_name().write()).hint_text("Dersleri Filtrele"))
                .changed()
            {
                set_lecture_filter();
            };
            ui.add_space(5.);
            ui.layout().with_main_wrap(true);
            Flex::horizontal()
                .wrap(true)
                .align_items(egui_flex::FlexAlign::Start)
                // .justify(egui_flex::FlexJustify::Center)
                // .align_items(egui_flex::FlexAlign::Center)
                .width_percent(0.3)
                .show(ui, |flex| {
                    for lec in &filtered_lectures().read()[..] {
                        let sel_lec = act_lec();
                        let mut color = Color32::GRAY;
                        let mut stroke = 0.3;
                        if let Some(l) = &*sel_lec.read() {
                            if &l.id == &lec.id {
                                color = Color32::BLUE;
                                stroke = 1.0;
                            }
                        }

                        let frame = egui::Frame::default()
                            .stroke(Stroke::new(stroke, color))
                            .rounding(5.)
                            .inner_margin(5.);
                        if flex
                            .add_widget(
                                item().frame(frame),
                                Label::new(&lec.name).sense(Sense::click()),
                            )
                            .inner
                            .on_hover_cursor(egui::CursorIcon::PointingHand)
                            .clicked()
                        {
                            let lec = lec.clone();
                            std::thread::spawn(move || {
                                let lec_clone = Arc::clone(sel_lec);
                                *lec_clone.write() = Some(lec.clone());
                            });
                        }
                    }
                });
            ui.add_sized(
                vec2(500., 30.),
                TextEdit::singleline(&mut *act_hours().write()).hint_text("Ders bloklarını gir"),
            );
            if ui.add_sized(vec2(500., 30.), Button::new("Ekle")).clicked() {
                add_act();
            };
        });
}