use std::{cell::Cell, rc::Rc};

use gtk::{
    glib::{self, clone},
    prelude::*,
    Application, ApplicationWindow, Button, Label, Orientation,
};

fn main() {
    let app = Application::new(Some("eu.muehml.hello-world"), Default::default());
    app.connect_activate(build_ui);

    app.run();
}

fn build_ui(application: &Application) {
    let window = ApplicationWindow::new(application);

    window.set_title(Some("My GTK App"));

    let button_increase = Button::with_label("Increase");
    let button_decrease = Button::with_label("Decrease");

    let number = Rc::new(Cell::new(0));

    let label = Label::new(Some(&number.get().to_string()));

    button_increase.connect_clicked(clone!(@strong number, @weak label => move |_| {
        number.set(number.get() + 1);
        label.set_label(&number.get().to_string());
    }));
    button_decrease.connect_clicked(clone!(@strong number, @weak label => move |_| {
        number.set(number.get() - 1);
        label.set_label(&number.get().to_string());}));

    let gtk_box = gtk::Box::new(Orientation::Vertical, 0);

    window.set_child(Some(&gtk_box));

    gtk_box.append(&button_increase);
    gtk_box.append(&label);
    gtk_box.append(&button_decrease);

    window.present();
}