use std::io;
use titik::crossterm::Result;
use titik::{
Button, Callback, Checkbox, FlexBox, GroupBox, Image, ListBox, Radio,
Renderer, Slider, TabBox, TextArea, TextInput, TextLabel, Widget,
};
fn main() -> Result<()> {
let mut stdout = io::stdout();
let mut root_node = FlexBox::<()>::new();
root_node.set_border(false);
root_node.set_thick_border(true);
let mut column = FlexBox::new();
column.vertical();
column.set_border(false);
column.set_thick_border(false);
let mut row = FlexBox::<()>::new();
row.horizontal();
row.set_border(false);
row.set_thick_border(false);
row.set_rounded(true);
let btn1 = Button::<()>::new("btn 1");
let btn2 = Button::<()>::new("btn 2");
let cb1 = Checkbox::<()>::new("cb 1");
let cb2 = Checkbox::<()>::new("cb 2");
let label1 = TextLabel::new("label1");
let rb1 = Radio::<()>::new("Radio1");
let rb2 = Radio::<()>::new("Radio2");
let input1 = TextInput::new("Hello");
let mut list_box1 = ListBox::<()>::new();
list_box1.set_use_divider(true);
list_box1.set_list(vec![
"Item1".into(),
"Item2".into(),
"Item3".into(),
"Item4".into(),
"Item5".into(),
"Item6".into(),
"Item7".into(),
"Item8".into(),
"Item9".into(),
"Item10".into(),
"Item11".into(),
"Item12".into(),
"Item13".into(),
"Item14".into(),
"Item15".into(),
"Item16".into(),
"Item17".into(),
"Item18".into(),
"Item19".into(),
"Item20".into(),
"Item21".into(),
"Item22".into(),
"Item23".into(),
"Item24".into(),
"Item25".into(),
"Item26".into(),
"Item27".into(),
"Item28".into(),
"Item29".into(),
"Item30".into(),
]);
let mut tab1 = TabBox::new();
tab1.set_tab_labels(vec![
"Tab1".into(),
"Tab2".into(),
"Tab3".into(),
"Tab4".into(),
"Tab5".into(),
"And more tabs..".into(),
]);
let cb11 = Checkbox::new("Checkbox1");
let cb12 = Checkbox::new("Checkbox2");
let rb11 = Radio::new("Radio1");
let rb12 = Radio::new("Radio2");
let mut gb1 = GroupBox::new();
gb1.set_label("Selection");
gb1.add_child(Box::new(cb11));
gb1.add_child(Box::new(cb12));
gb1.add_child(Box::new(rb11));
gb1.add_child(Box::new(rb12));
let mut tab_row = FlexBox::new();
tab_row.vertical();
tab1.set_active_tab(2);
tab1.add_child_to_tab(1, Box::new(list_box1));
tab_row.add_child(Box::new(Checkbox::new("checkbox1 in first tab")));
tab_row.add_child(Box::new(Checkbox::new("checkbox2 in first tab")));
tab_row.add_child(Box::new(Radio::new("radio1 in first tab")));
tab_row.add_child(Box::new(TextInput::new("Hello input in first tab")));
tab1.add_child_to_tab(0, Box::new(tab_row));
tab1.add_child_to_tab(2, Box::new(gb1));
tab1.add_child_to_tab(
3,
Box::new(TextArea::new("This is a good textarea view")),
);
column.add_child(Box::new(cb1));
column.add_child(Box::new(cb2));
column.add_child(Box::new(rb1));
column.add_child(Box::new(rb2));
column.add_child(Box::new(input1));
column.add_child(Box::new(label1));
row.add_child(Box::new(btn1));
row.add_child(Box::new(btn2));
row.add_child(Box::new(tab1));
column.add_child(Box::new(row));
root_node.add_child(Box::new(column));
let mut renderer = Renderer::<()>::new(&mut stdout, None, &mut root_node);
renderer.run()?;
Ok(())
}