///|
#warnings("-alert_unstable")
pub fn moongate_rabbita_document_html(
  api_base? : String = "http://127.0.0.1:15721",
) -> String {
  @rabbita.render_to_string(
    @rabbita.static_cell(
      @html.html(lang="en", [
        @html.head([
          @html.meta(charset="utf-8"),
          @html.meta(
            name="viewport",
            content="width=device-width, initial-scale=1",
          ),
          @html.title("MoonGate"),
        ]),
        @html.body([moongate_rabbita_shell_view(api_base~)]),
      ]),
    ),
  )
}

///|
pub fn moongate_rabbita_shell_dom_ids() -> Array[String] {
  [
    "nav", "sidebar-gateway-dot", "sidebar-gateway-state", "ui-updated", "page-title",
    "page-subtitle", "topbar-updated", "overview", "page-overview", "page-connect",
    "page-bindings", "page-connections", "page-providers", "page-requests", "page-usage",
    "page-operations", "page-suite", "refresh", "proxy-start", "proxy-stop", "gateway-dot",
    "gateway-endpoint", "gateway-hero-dot", "gateway-state", "gateway-detail", "proxy-state",
    "proxy-detail", "request-total", "request-total-detail", "cost-total", "cost-detail",
    "readiness", "readiness-cards", "framework-total", "framework-detail", "gateway-port",
    "gateway-port-detail", "connection-board", "connection-copy-status", "provider-editor",
    "provider-form", "provider-original-id", "provider-original-app", "provider-app",
    "provider-template", "provider-template-apply", "provider-template-load", "provider-template-reload",
    "provider-template-file", "provider-template-status", "provider-id", "provider-name",
    "provider-type", "provider-base-url", "provider-api-format", "provider-api-key",
    "provider-default-model", "provider-sonnet-model", "provider-haiku-model", "provider-opus-model",
    "provider-notes", "provider-enabled", "provider-full-url", "provider-fast-mode",
    "provider-clear-api-key", "provider-clear-models", "provider-credential-status",
    "provider-save", "provider-delete", "provider-test", "provider-test-result",
    "provider-form-status", "bindings", "bindings-refresh", "binding-rows", "binding-status",
    "connection-graph", "connection-graph-refresh", "connection-graph-verified",
    "connection-graph-configured", "connection-graph-unwired", "connection-graph-routes",
    "connection-graph-status", "setup-import-mcp", "setup-auth-state", "setup-auth-rows",
    "setup-runtime-state", "setup-runtime-rows", "setup-mcp-state", "setup-mcp-rows",
    "suite", "suite-refresh", "suite-write-status", "suite-write-moonclaw", "suite-status-state",
    "suite-app-count", "suite-capability-count", "suite-provider-count", "suite-status-path",
    "suite-app-rows", "suite-integrations", "resilience", "resilience-app", "resilience-provider",
    "resilience-refresh", "resilience-auto-state", "resilience-circuit-state", "resilience-queue-count",
    "resilience-limit-state", "resilience-circuit-status", "circuit-form", "circuit-failure-threshold",
    "circuit-success-threshold", "circuit-timeout-seconds", "circuit-error-rate-threshold",
    "circuit-min-requests", "resilience-reset-circuit", "resilience-stream-status",
    "stream-form", "stream-timeout-secs", "stream-max-retries", "stream-degraded-threshold-ms",
    "stream-codex-model", "stream-claude-model", "stream-gemini-model", "stream-test-prompt",
    "resilience-stream-check", "resilience-toggle-auto", "failover-queue", "resilience-add-selected",
    "available-failover", "stream-check-results", "provider-health", "provider-count",
    "provider-rows", "usage", "app-usage", "model-usage", "usage-explorer", "usage-app",
    "usage-range", "usage-apply", "usage-filter-requests", "usage-filter-cost", "usage-filter-tokens",
    "usage-filter-cache", "usage-trends", "provider-usage", "filtered-model-usage",
    "operations-latency-p50", "operations-latency-p95", "operations-latency-p99",
    "operations-ttft-p95", "operations-inflight", "operations-queue", "operations-circuits",
    "operations-failovers", "operations-app", "routing-policy-form", "routing-policy-mode",
    "routing-policy-id", "routing-policy-weights", "routing-policy-limits", "routing-policy-save",
    "routing-policy-observe", "routing-policy-status", "routing-draft-revision",
    "routing-shadow-count", "routing-shadow-choice", "routing-active-policy", "routing-actor-principal",
    "routing-authority-decision", "routing-policy-activate", "routing-policy-rollback",
    "routing-receipt", "benchmark-run", "benchmark-mode", "benchmark-claim", "benchmark-p95",
    "benchmark-throughput", "benchmark-status", "operations-monitor-status", "requests",
    "request-log", "request-detail-panel", "request-detail-id", "request-detail",
    "error-box", "error-message", "toast", "toast-text",
  ]
}

///|
#warnings("-alert_unstable")
pub fn moongate_rabbita_shell_html(
  api_base? : String = "http://127.0.0.1:15721",
) -> String {
  @rabbita.render_to_string(
    @rabbita.static_cell(moongate_rabbita_shell_view(api_base~)),
  )
}

///|
pub fn moongate_rabbita_lepusa_manifest_json(
  api_base? : String = "http://127.0.0.1:15721",
) -> Json {
  Json::object({
    "identifier": Json::string("dev.vectie.moongate.rabbita"),
    "productName": Json::string("MoonGate Rabbita Preview"),
    "version": Json::string("0.1.0"),
    "rootHtml": Json::string(moongate_rabbita_shell_html(api_base~)),
    "runtime": Json::object({
      "backend": Json::string("system-webview"),
      "assetProtocol": Json::string("lepusa"),
      "devtools": Json::boolean(false),
    }),
    "window": Json::object({
      "label": Json::string("main"),
      "title": Json::string("MoonGate"),
      "width": Json::number(1180.0),
      "height": Json::number(780.0),
      "resizable": Json::boolean(true),
    }),
    "plugins": Json::array([
      Json::object({ "name": Json::string("localhost") }),
      Json::object({ "name": Json::string("serviceDiscovery") }),
      Json::object({ "name": Json::string("opener") }),
    ]),
    "capabilities": Json::array([
      Json::object({
        "name": Json::string("main"),
        "windows": Json::array([Json::string("main")]),
        "permissions": Json::array([
          Json::string("localhost"),
          Json::string("service-discovery"),
          Json::string("opener"),
        ]),
      }),
    ]),
    "startup": Json::object({
      "effect": Json::string("connect-moongate-rabbita-preview"),
    }),
  })
}

///|
pub fn moongate_rabbita_lepusa_manifest(
  api_base? : String = "http://127.0.0.1:15721",
) -> String {
  moongate_rabbita_lepusa_manifest_json(api_base~).stringify(indent=2)
}

///|
pub fn moongate_lepusa_manifest_json(port? : Int = 15721) -> Json {
  Json::object({
    "identifier": Json::string("dev.vectie.moongate"),
    "productName": Json::string("MoonGate"),
    "version": Json::string("0.1.0"),
    "icon": Json::string("assets/moongate.icns"),
    "signing": Json::object({ "identity": Json::string("-") }),
    "runtime": Json::object({
      "backend": Json::string("system-webview"),
      "assetProtocol": Json::string("lepusa"),
      "devtools": Json::boolean(false),
    }),
    "bundleResources": Json::array([
      Json::object({
        "source": Json::string("public"),
        "path": Json::string("public"),
      }),
      Json::object({
        "source": Json::string("_build/native/release/build/cmd/main/main.exe"),
        "path": Json::string("moongate-server"),
        "executable": Json::boolean(true),
      }),
    ]),
    "window": Json::object({
      "label": Json::string("main"),
      "title": Json::string("MoonGate"),
      "width": Json::number(1180.0),
      "height": Json::number(780.0),
      "resizable": Json::boolean(true),
      "source": Json::object({
        "localhost": Json::object({
          "port": Json::number(port.to_double()),
          "path": Json::string("/ui/rabbita"),
          "readinessPath": Json::string("/health"),
          "command": Json::array([
            Json::string("moongate-server"),
            Json::string("start"),
          ]),
        }),
      }),
    }),
    "plugins": Json::array([
      Json::object({ "name": Json::string("localhost") }),
      Json::object({ "name": Json::string("serviceDiscovery") }),
      Json::object({ "name": Json::string("opener") }),
    ]),
    "capabilities": Json::array([
      Json::object({
        "name": Json::string("main"),
        "windows": Json::array([Json::string("main")]),
        "permissions": Json::array([
          Json::string("localhost"),
          Json::string("service-discovery"),
          Json::string("opener"),
        ]),
      }),
    ]),
    "startup": Json::object({ "effect": Json::string("connect-moongate") }),
  })
}

///|
pub fn moongate_lepusa_manifest(port? : Int = 15721) -> String {
  moongate_lepusa_manifest_json(port~).stringify(indent=2)
}