#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
pub mod fonts;
pub mod tabs;
use eframe::egui;
use eframe::egui::ViewportBuilder;
use eframe::NativeOptions;

use egui_dock::{DockArea, DockState, Style};
fn main() -> eframe::Result<()> {
    let size = ViewportBuilder::default().with_maximized(true);
    let options = NativeOptions {
        viewport: size,
        ..Default::default()
    };
    eframe::run_native(
        "Lapis Ders Dağıtım",
        options,
        Box::new(|_cc| Ok(Box::<MyApp>::default())),
    )
}
static DAYS: &[&str] = &[
    "Pazartesi",
    "Salı",
    "Çarşamba",
    "Perşembe",
    "Cuma",
    "Cumartesi",
    "Pazar",
];
#[derive(Default, Debug)]
enum Page {
    #[default]
    Home,
    Signin,
    Login,
}

#[derive(Default, Debug)]
enum HomeTab {
    #[default]
    Home,
    Classes,
    Teachers,
    Classrooms,
    Lectures,
    Limitations,
    Activities,
    Generate,
}
impl egui_dock::TabViewer for HomeTab {
    type Tab = HomeTab;

    fn title(&mut self, tab: &mut Self::Tab) -> egui_dock::egui::WidgetText {
        format!("{:?}", &*tab).into()
    }

    fn ui(&mut self, ui: &mut egui::Ui, tab: &mut Self::Tab) {
        match tab {
            HomeTab::Home => {
                tabs::school_page(ui);
            }
            HomeTab::Classes => {
                tabs::classes::classes_page(ui);
            }
            HomeTab::Teachers => {
                tabs::teachers::teachers_page(ui);
            }
            HomeTab::Classrooms => {
                tabs::classrooms::classrooms_page(ui);
            }
            HomeTab::Lectures => {
                tabs::lectures::lectures_page(ui);
            }
            HomeTab::Limitations => {
                tabs::limitations::limitations(ui);
            }
            HomeTab::Activities => {
                tabs::activities::activities_ui(ui);
            }
            HomeTab::Generate => {
                tabs::generate::generate_ui(ui);
            }
        };
    }
}

struct MyApp {
    tree: DockState<HomeTab>,
    page: Page,
}

impl Default for MyApp {
    fn default() -> Self {
        let tree = DockState::new(vec![
            HomeTab::Home,
            HomeTab::Classes,
            HomeTab::Teachers,
            HomeTab::Lectures,
            HomeTab::Classrooms,
            HomeTab::Limitations,
            HomeTab::Activities,
            HomeTab::Generate,
        ]);
        let page = Page::Home;
        // You can modify the tree before constructing the dock
        // let [a, b] =
        //     tree.main_surface_mut()
        //         .split_left(NodeIndex::root(), 0.3, vec!["tab3".to_owned()]);
        // let [_, _] = tree
        //     .main_surface_mut()
        //     .split_below(a, 0.7, vec!["tab4".to_owned()]);
        // let [_, _] = tree
        //     .main_surface_mut()
        //     .split_below(b, 0.5, vec!["tab5".to_owned()]);

        Self { tree, page }
    }
}

impl eframe::App for MyApp {
    fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
        // ctx.set_theme(ThemePreference::Light);
        // let mut fonts = FontDefinitions::default();

        // // Install my own font (maybe supporting non-latin characters):
        // fonts.font_data.insert(
        //     "my_font".to_owned(),
        //     std::sync::Arc::new(
        //         // .ttf and .otf supported
        //         FontData::from_static(include_bytes!("./fonts/FreeSansBold.otf")),
        //     ),
        // );
        // fonts
        //     .families
        //     .get_mut(&egui::FontFamily::Proportional)
        //     .unwrap()
        //     .insert(0, "my_font".to_owned());
        // ctx.set_fonts(fonts);
        match self.page {
            Page::Home => {
                DockArea::new(&mut self.tree)
                    .show_leaf_close_all_buttons(false)
                    .style(Style::from_egui(ctx.style().as_ref()))
                    .show_close_buttons(false)
                    .show_add_popup(true)
                    .show(ctx, &mut HomeTab::Home);
            }
            _ => {}
        }
    }
}
// pub struct TemplateApp {
//     run_once: bool,
//     my_theme: StateMachine,
// }

// impl Default for TemplateApp {
//     fn default() -> Self {
//         Self {
//             run_once: false,
//             my_theme: egui_themes::StateMachine::new(),
//         }
//     }
// }