use crate::egui::Align2;
use crate::{ctx_img, img, Margin, Slide};
use eframe::egui;
use eframe::egui::{Frame, Ui, Vec2, Window};

/// The first slide in the cartoon.
#[derive(Default)]
pub struct Title {
    examples: Vec<egui::TextureHandle>,
}

impl Slide for Title {
    fn show(&mut self, ui: &mut Ui) {
        if self.examples.is_empty() {
            // For now, these images are somewhat like placeholders.
            self.examples = vec![
                ctx_img!(ui.ctx(), "raymarching0.png"),
                ctx_img!(ui.ctx(), "raymarching1.png"),
                ctx_img!(ui.ctx(), "atom0.png"),
                ctx_img!(ui.ctx(), "atom1.png"),
                ctx_img!(ui.ctx(), "atom2.png"),
            ];
        }

        for example in &self.examples {
            Window::new(example.name())
                .title_bar(false)
                .resizable(false)
                // Reduce margin of example images.
                .frame(Frame::window(&ui.style()).margin(Margin::same(5.0)))
                .show(ui.ctx(), |ui| {
                    ui.image(example, Vec2::splat(128.0));
                });
        }

        Window::new("title")
            .title_bar(false)
            .resizable(false)
            .anchor(Align2::CENTER_CENTER, Vec2::ZERO)
            .default_width(400.0)
            .frame(Frame::window(ui.style()))
            .show(ui.ctx(), |ui| {
                ui.vertical_centered(|ui| {
                    ui.heading("Generative Art");
                    ui.label("By: Finn, Matthew, Nathan, Owen");
                });
            });
    }
}