use maud::{Markup, Render, html};

use crate::ui::UIWidget;

#[allow(non_snake_case)]
pub fn Header<T: UIWidget + 'static>(inner: T) -> HeaderWidget {
    HeaderWidget(Box::new(inner))
}

pub struct HeaderWidget(Box<dyn UIWidget>);

impl Render for HeaderWidget {
    fn render(&self) -> Markup {
        self.render_with_class("")
    }
}

impl UIWidget for HeaderWidget {
    fn can_inherit(&self) -> bool {
        true
    }

    fn base_class(&self) -> Vec<String> {
        vec![]
    }

    fn extended_class(&self) -> Vec<String> {
        let mut c = self.base_class();
        c.extend_from_slice(&self.0.extended_class());
        c
    }

    fn render_with_class(&self, class: &str) -> Markup {
        html! {
            header class=(class) {
                (self.0.as_ref())
            }
        }
    }
}