use lv_tui::prelude::*;
use lv_tui::widgets::*;

struct App { dialog: Dialog }

impl App {
    fn new() -> Self {
        Self {
            dialog: Dialog::new(
                Column::new().gap(1)
                    .child(Label::new("确认删除?").style(Style::default().bold()))
                    .child(Label::new("此操作不可撤销"))
            ),
        }
    }
}

impl Component for App {
    fn render(&self, cx: &mut RenderCx) {
        self.dialog.render(cx);
        if self.dialog.confirmed() {
            cx.line("已确认 ✓");
        } else if self.dialog.cancelled() {
            cx.line("已取消 ✗");
        }
    }

    fn event(&mut self, e: &Event, cx: &mut EventCx) {
        if e.is_key(Key::Char('q')) { cx.quit(); return; }
        self.dialog.event(e, cx);
    }

    fn layout(&mut self, r: lv_tui::geom::Rect, cx: &mut lv_tui::component::LayoutCx) {
        self.dialog.layout(r, cx);
    }
    fn measure(&self, c: lv_tui::layout::Constraint, _cx: &mut lv_tui::component::MeasureCx) -> lv_tui::geom::Size {
        lv_tui::geom::Size { width: c.max.width, height: c.max.height }
    }
    fn for_each_child(&self, f: &mut dyn FnMut(&lv_tui::node::Node)) { self.dialog.for_each_child(f); }
    fn for_each_child_mut(&mut self, f: &mut dyn FnMut(&mut lv_tui::node::Node)) { self.dialog.for_each_child_mut(f); }
    fn focusable(&self) -> bool { false }
}

fn main() -> lv_tui::Result<()> {
    lv_tui::app::App::new(App::new()).run()
}
