use gtk::{prelude::*, subclass::prelude::*};
use otg_core::{
    ui::{ChatElement, PlayerCardElement, PlayingFieldView},
    Color,
};
use otg_gtk::ui::{playing_field_view, Chat, PlayerCard, PlayingField};
use screenplay::{Screen, Screenplay};

fn main() {
    gio::resources_register_include!("com.luminescent-dreams.otg-gtk.gresource")
        .expect("Failed to register resources");

    let app = gtk::Application::builder()
        .application_id("com.luminescent-dreams.otg-gtk.screenplay")
        .build();

    app.connect_activate(|app| {
        let screens = vec![
            Screen {
                title: "PlayerCard".to_owned(),
                widget: PlayerCard::new(PlayerCardElement {
                    color: Color::Black,
                    name: "Opal".to_owned(),
                    rank: "10 kyu".to_owned(),
                    clock: "25:00".to_owned(),
                })
                .upcast::<gtk::Widget>(),
                adjustments: vec![],
            },
            Screen {
                title: "ChatArea".to_owned(),
                widget: Chat::new(ChatElement {
                    messages: vec![
                        "message 1".to_owned(),
                        "message 2".to_owned(),
                        "message 3".to_owned(),
                    ],
                })
                .upcast::<gtk::Widget>(),
                adjustments: vec![],
            },
            Screen {
                title: "PlayingField".to_owned(),
                widget: PlayingField::new(playing_field_view()).upcast::<gtk::Widget>(),
                adjustments: vec![],
            },
        ];
        Screenplay::new(&app, screens).unwrap();
    });

    app.run();
}