///|
/// Integration-only Showcase assembly. Platform entrypoints provide concrete
/// environment and diagnostic DTO sources; app state remains platform-neutral.
pub fn runtime(
  host_summary~ : @host.HostCapabilitySummary,
  environment? : @services.AppEnvironment = @services.AppEnvironment::new(),
  renderer_providers? : Array[@render.RendererProvider] = [],
  route? : String = @app.ShowcaseRoute::default().format(),
  route_host? : @app.ShowcaseRouteHost? = None,
  initial_section_code? : Int = 0,
  width? : Double = 1100.0,
  height? : Double = 680.0,
) -> @runtime.AppRuntime {
  let diagnostics_input = diagnostics_input(host_summary, renderer_providers)
  let model = @app.ShowcaseModel::new(diagnostics_input~, route~)
  let model = if initial_section_code == 1 {
    model.update(@app.ShowcaseMsg::Navigate("diagnostics/advanced-rendering"))
  } else if initial_section_code == 2 {
    model.update(@app.ShowcaseMsg::Navigate("components/accessibility-probe"))
  } else {
    model
  }
  let program = match route_host {
    Some(host) => model.program_with_route_host(host, environment~)
    None => model.program_with_environment(environment)
  }
  @runtime.new_program_with_dimensions(program~, width~, height~)
}

///|
pub fn route_host(
  source~ : @services.RouteSource,
  push~ : (String) -> Unit,
  replace~ : (String) -> Unit,
  back~ : () -> Unit,
  forward~ : () -> Unit,
) -> @app.ShowcaseRouteHost {
  @app.ShowcaseRouteHost::new(route_source=source, dispatch_command=command => {
    match command {
      @app.ShowcaseRouteHistoryCommand::PushRoute(route) => push(route)
      @app.ShowcaseRouteHistoryCommand::ReplaceRoute(route) => replace(route)
      @app.ShowcaseRouteHistoryCommand::BackRoute => back()
      @app.ShowcaseRouteHistoryCommand::ForwardRoute => forward()
    }
  })
}

///|
pub fn env_flag(name : String) -> Bool {
  @env.get_env_var(name) == Some("1")
}