use slint::{ComponentHandle, VecModel};
use std::rc::Rc;
use crate::{AppWindow, NavItem, ShellToolbarItem};
use super::{AppDsl, BgStyle};
pub fn apply(ui: &AppWindow, dsl: &AppDsl) {
let nav: Vec<NavItem> = dsl.nav.iter().map(|n| NavItem {
id: n.id.as_str().into(),
label: n.label.as_str().into(),
icon: n.icon_code.as_str().into(),
is_header: false,
hidden: false,
}).collect();
ui.set_nav_items(Rc::new(VecModel::from(nav)).into());
let toolbar: Vec<ShellToolbarItem> = dsl.toolbar.iter().map(|t| ShellToolbarItem {
id: t.id.as_str().into(),
icon: t.icon_code.as_str().into(),
tooltip: t.tooltip.as_str().into(),
}).collect();
ui.set_toolbar_items(Rc::new(VecModel::from(toolbar)).into());
ui.set_show_toolbar(dsl.show_toolbar);
ui.set_status_text(dsl.status.as_str().into());
if let Some((w, h)) = dsl.window_size {
ui.window().set_size(slint::PhysicalSize::new(w, h));
}
let material: &str = match dsl.bg_style {
BgStyle::Mica => "mica",
BgStyle::Acrylic => "acrylic",
BgStyle::Solid => "solid",
};
ui.global::<crate::Theme>().set_material(material.into());
ui.global::<crate::Theme>().set_platform(dsl.platform.as_str().into());
}