Documentation
use egui::Ui;

use crate::{
    git_app::{GitApps, TagSymbol},
    GitApp,
};

pub fn render_git_app(app: &mut GitApp, ui: &mut Ui) {
    egui::Grid::new("git_apps_grid").show(ui, |ui| {
        ui.horizontal(|ui| {
            ui.heading("Git Apps");

            egui::ComboBox::from_label("")
                .selected_text(format!("{:?}", app.selected_gits_app))
                .show_ui(ui, |ui| {
                    ui.selectable_value(
                        &mut app.selected_gits_app,
                        GitApps::TagDiffWeb,
                        "Web Diff",
                    );
                    ui.selectable_value(
                        &mut app.selected_gits_app,
                        GitApps::TagDiffCommand,
                        "Command Diff",
                    );
                });
        });

        ui.end_row();

        ui.vertical(|ui| match app.selected_gits_app {
            GitApps::TagDiffWeb => render_web_diff(app, ui),
            GitApps::TagDiffCommand => render_tag_diff(app, ui),
        });

        ui.end_row();
    });
}

fn render_tag_diff(app: &mut GitApp, ui: &mut Ui) {
    ui.vertical(|ui| {
        ui.add_space(20.0);
        actions(app, ui);
        ui.end_row();
        settings(app, ui);

        ui.end_row();
    });
}

fn combine_choosen(app: &GitApp) -> String {
    let base = app.base_url.clone();

    let delimiter = "/".to_owned();

    let owner = app.owner.clone();

    let repo = app.repo.clone();

    let compare = "compare".to_owned();

    let one = app.choosen.get_choosen_symbol_chain();

    let points = "...".to_owned();

    let two = app.choosen_other.get_choosen_symbol_chain();

    let pre = vec![
        base,
        delimiter.clone(),
        owner,
        delimiter.clone(),
        repo,
        delimiter.clone(),
        compare,
        delimiter,
        one,
        points,
        two,
    ];
    pre.concat()
}

fn render_web_diff(app: &mut GitApp, ui: &mut Ui) {
    ui.vertical(|ui| {
        ui.add_space(20.0);
        actions(app, ui);
        ui.end_row();
        settings(app, ui);
        ui.end_row();
        ui.label(combine_choosen(app));
        ui.hyperlink(combine_choosen(app))
    });
}

fn actions(app: &mut GitApp, ui: &mut Ui) {
    ui.horizontal(|ui| {
        ui.collapsing("Actions", |ui| {
            ui.horizontal(|ui| {
                if ui.button("create new").clicked() {
                    app.choosen.choose(TagSymbol::new(1, "prefix", "something"));
                    app.choosen.choose(TagSymbol::new(2, "delitmiter1", "/"));
                    app.choosen
                        .choose(TagSymbol::new(3, "inner", "someversion"));
                    app.choosen.choose(TagSymbol::new(4, "delitmiter11", "/"));
                    app.choosen
                        .choose(TagSymbol::new(5, "delimiter", "someversion"));
                };
            });

            if ui.button("take over").clicked() {
                app.choosen_other.take_over(&app.choosen)
            };
        });
    });
}

fn settings(app: &mut GitApp, ui: &mut Ui) {
    ui.horizontal(|ui| {
        ui.collapsing("Settings", |ui| {
            ui.vertical(|ui| {
                ui.text_edit_singleline(&mut app.base_url);
                ui.text_edit_singleline(&mut app.owner);
                ui.text_edit_singleline(&mut app.repo);
            });

            ui.vertical(|ui| {
                ui.horizontal(|ui| {
                    let mut cloned = app.choosen.get_choosen_symbols();
                    for choosen in &mut cloned {
                        ui.text_edit_singleline(&mut choosen.symbol);
                        ui.add_space(1.0);
                    }
                    for new in cloned.clone() {
                        app.choosen.choose(new)
                    }
                });

                ui.add_space(5.0);
                ui.horizontal(|ui| {
                    let mut cloned_other = app.choosen_other.get_choosen_symbols();
                    for choosen_other in &mut cloned_other {
                        ui.text_edit_singleline(&mut choosen_other.symbol);
                        ui.add_space(2.0);
                    }
                    for new in cloned_other.clone() {
                        app.choosen_other.choose(new)
                    }
                });
            });
        })
    });
}