//! Aspirational RUIN app API for explicit renderer/platform extensions.
//!
//! Intentionally non-compiling; this is a design sketch.

use ruin::prelude::*;
use ruin::renderer::native::prelude::*;
use ruin::renderer::web::prelude::*;

#[ruin_runtime::async_main]
async fn main() -> ruin::Result<()> {
    App::new()
        .window(Window::new().title("RUIN Renderer Extensions").size(980.0, 720.0))
        .mount::<PortableRoot>()
        .run()
        .await
}

#[component]
fn PortableRoot() -> impl View {
    let selected_tab = use_signal(|| 0usize);

    let shared_content = view! {
        column(fill = true, gap = 16, padding = 20) {
            text(role = TextRole::Heading(1), size = 28, weight = FontWeight::Semibold) {
                "Portable baseline first"
            }
            text(color = colors::muted()) {
                "The common subset should live in the main prelude. Anything renderer-specific \
                 should require an explicit extension trait so the callsite makes the portability \
                 tradeoff obvious."
            }
            segmented_control(value = selected_tab) {
                segment(index = 0) { "Overview" }
                segment(index = 1) { "Details" }
            }
        }
    };

    view! {
        stack(fill = true) {
            #[cfg(target_family = "wasm")]
            {
                shared_content
                    .dom_element("section")
                    .dom_attribute("data-tab", selected_tab.get().to_string())
            }

            #[cfg(not(target_family = "wasm"))]
            {
                shared_content
                    .native_surface_role(SurfaceRole::Panel)
                    .native_backdrop_blur(18.0)
            }
        }
    }
}
