use cushy::value::{Destination, Dynamic, Source};
use cushy::widget::MakeWidget;
use cushy::widgets::button::ButtonKind;
use cushy::Run;

fn main() -> cushy::Result {
    let clicked_label = Dynamic::new(String::from("Click a Button"));
    let default_is_outline = Dynamic::new(false);
    let default_button_style = default_is_outline.map_each(|is_outline| {
        if *is_outline {
            ButtonKind::Outline
        } else {
            ButtonKind::Solid
        }
    });

    clicked_label
        .clone()
        .and(
            "Normal Button"
                .into_button()
                .on_click(
                    clicked_label.with_clone(|label| {
                        move |_| label.set(String::from("Clicked Normal Button"))
                    }),
                )
                .and(
                    "Outline Button"
                        .into_button()
                        .on_click(clicked_label.with_clone(|label| {
                            move |_| label.set(String::from("Clicked Outline Button"))
                        }))
                        .kind(ButtonKind::Outline),
                )
                .and(
                    "Transparent Button"
                        .into_button()
                        .on_click(clicked_label.with_clone(|label| {
                            move |_| label.set(String::from("Clicked Transparent Button"))
                        }))
                        .kind(ButtonKind::Transparent),
                )
                .and(
                    "Default Button"
                        .into_button()
                        .on_click(clicked_label.with_clone(|label| {
                            move |_| label.set(String::from("Clicked Default Button"))
                        }))
                        .kind(default_button_style)
                        .into_default(),
                )
                .and("Set Default to Outline".into_checkbox(default_is_outline))
                .into_columns(),
        )
        .into_rows()
        .centered()
        .run()
}
