use std::sync::Arc;

use eframe::egui::{self, mutex::RwLock, Align2, Color32, Frame, Label, Stroke, TextEdit, Vec2};
use egui_flex::{item, Flex};

use crate::tabs::classrooms::{classroom_name, get_classrooms, ClassRoom};

use super::{act_classrooms, filtered_classrooms};

pub fn set_classrooms_filter() {
    let f = classroom_name().read();
    let f = &*f.to_uppercase();
    let tchrs = get_classrooms()
        .read()
        .clone()
        .into_iter()
        .filter(|l| l.1.name.to_uppercase().contains(&f));
    *filtered_classrooms().write() = tchrs.map(|t| t.1.clone()).collect();
    filtered_classrooms()
        .write()
        .sort_by(|a, b| a.name.cmp(&b.name));
}
pub fn select_classroom_ui(ui: &mut egui::Ui) {
    ui.vertical(|ui| {
        Frame::none()
            .stroke(Stroke::new(1., Color32::BLACK))
            .rounding(1.)
            .inner_margin(10.0)
            .outer_margin(10.0)
            .show(ui, |ui| {
                ui.label("Derslik(ler)i Seçin ");
                if ui
                    .add(
                        TextEdit::singleline(&mut *classroom_name().write())
                            .hint_text("Derslikleri Filtrele"),
                    )
                    .changed()
                {
                    set_classrooms_filter()
                };
                ui.add_space(5.);
                Flex::horizontal()
                    .wrap(true)
                    // .justify(egui_flex::FlexJustify::Center)
                    .align_items(egui_flex::FlexAlign::Center)
                    .show(ui, |flex| {
                        let teachers = filtered_classrooms().read();
                        for teacher in &*teachers {
                            let is_selected =
                                act_classrooms().read().iter().any(|i| teacher.id == i.id);
                            let stroke = Stroke::new(
                                if is_selected { 1.0 } else { 0.5 },
                                if is_selected {
                                    Color32::BLUE
                                } else {
                                    Color32::GRAY
                                },
                            );

                            let _frame = egui::Frame::default()
                                .stroke(stroke)
                                .rounding(5.)
                                .inner_margin(5.);
                            flex.add_flex(
                                item(),
                                Flex::horizontal().align_items_content(Align2::CENTER_TOP),
                                // frame,
                                |flex| {
                                    // let sel_lec = act_lec();
                                    if flex
                                        .add_ui(item(), |ui| {
                                            ui.add_sized(
                                                Vec2::new(30., 15.),
                                                Label::new(&teacher.name),
                                            )
                                        })
                                        .inner
                                        .on_hover_cursor(egui::CursorIcon::PointingHand)
                                        .clicked()
                                    {
                                        select_classroom(teacher.clone(), is_selected);
                                    };
                                },
                            );
                        }
                    });
            });
    });
}
fn select_classroom(cl: ClassRoom, del: bool) {
    let teachers = act_classrooms();
    // let selected_class = selected_class().read().unwrap();
    std::thread::spawn(move || {
        // let class = class.clone();
        let classrooms: Arc<RwLock<Vec<ClassRoom>>> = Arc::clone(teachers);
        if del {
            classrooms.write().retain(|t| &t.id != &cl.id);
        } else {
            classrooms.write().push(cl.clone());
        }
    });
}