use dioxus::prelude::*;
use dioxus_web::Config;
use web_sys::window;

fn app(cx: Scope) -> Element {
    cx.render(rsx! {
        div {
            h1 { "thing 1" }
        }
        div {
            h2 { "thing 2"}
        }
        div {
            h2 { "thing 2"}
            "asd"
            "asd"
            Bapp {}
        }
        (0..10).map(|f| rsx!{
            div {
                "thing {f}"
            }
        })
    })
}

#[allow(non_snake_case)]
fn Bapp(cx: Scope) -> Element {
    cx.render(rsx! {
        div {
            h1 { "thing 1" }
        }
        div {
            h2 { "thing 2"}
        }
        div {
            h2 { "thing 2"}
            "asd"
            "asd"
        }
    })
}

fn main() {
    console_error_panic_hook::set_once();
    wasm_logger::init(wasm_logger::Config::new(log::Level::Trace));

    let mut dom = VirtualDom::new(app);
    let _ = dom.rebuild();

    let pre = dioxus_ssr::pre_render(&dom);
    log::trace!("{}", pre);

    // set the inner content of main to the pre-rendered content
    window()
        .unwrap()
        .document()
        .unwrap()
        .get_element_by_id("main")
        .unwrap()
        .set_inner_html(&pre);

    // now rehydtrate
    dioxus_web::launch_with_props(app, (), Config::new().hydrate(true));
}
