///|
fn moon_provider_presets_json(path : StringView) -> Json {
  let app_type = usage_query_value(path, "appType")
  let query = usage_query_value(path, "query").unwrap_or("")
  let sort_mode = usage_query_value(path, "sortMode").unwrap_or("original")
  let presets = moon_visible_provider_presets(app_type, query, sort_mode)
  Json::array(presets)
}

///|
fn moon_visible_provider_presets(
  app_type : String?,
  query : String,
  sort_mode : String,
) -> Array[Json] {
  let filtered : Array[Json] = []
  let normalized_query = query.trim().to_lower()
  for preset in moon_provider_preset_catalog() {
    guard preset is Object(obj) else { continue }
    match app_type {
      Some(app) if json_string_from_map(obj, "appType") != Some(app) &&
        json_string_from_map(obj, "targetAppType") != Some(app) => continue
      _ => ()
    }
    if normalized_query.is_empty() ||
      moon_provider_preset_search_text(obj).contains(normalized_query) {
      filtered.push(preset)
    }
  }
  if sort_mode == "nameAsc" {
    filtered.sort_by(fn(left, right) {
      moon_provider_preset_name(left).compare(moon_provider_preset_name(right))
    })
  }
  filtered
}

///|
fn moon_provider_preset_name(preset : Json) -> String {
  match preset {
    Object(obj) => json_string_from_map(obj, "name").unwrap_or("")
    _ => ""
  }
}

///|
fn moon_provider_preset_search_text(obj : Map[String, Json]) -> String {
  [
    json_string_from_map(obj, "name").unwrap_or(""),
    json_string_from_map(obj, "websiteUrl").unwrap_or(""),
    json_string_from_map(obj, "apiKeyUrl").unwrap_or(""),
    json_string_from_map(obj, "category").unwrap_or("others"),
    json_string_from_map(obj, "partnerPromotionKey").unwrap_or(""),
  ]
  .join(" ")
  .to_lower()
}

///|
fn moon_provider_preset_catalog() -> Array[Json] {
  let presets = [
    moon_unity2_claude_preset_json("claude"),
    moon_unity2_claude_desktop_preset_json(),
    moon_unity2_codex_preset_json(),
    moon_unity2_gemini_preset_json(),
    moon_unity2_opencode_preset_json(),
    moon_unity2_openclaw_preset_json(),
    moon_unity2_hermes_preset_json(),
  ]
  for preset in moon_ready_provider_template_catalog() {
    presets.push(preset)
  }
  for preset in moon_provider_preset_summary_catalog() {
    presets.push(preset)
  }
  presets
}

///|
fn moon_provider_preset_summary_json(
  app_type : String,
  name : String,
  name_key : String,
  website_url : String,
  api_key_url : String,
  category : String,
  is_official : Bool,
  is_partner : Bool,
  partner_promotion_key : String,
  icon : String,
) -> Json {
  let obj : Map[String, Json] = {
    "appType": Json::string(app_type),
    "id": Json::string("\{app_type}:\{moon_provider_summary_slug(name)}"),
    "name": Json::string(name),
    "settingsConfig": Json::object({}),
  }
  if !name_key.is_empty() {
    obj["nameKey"] = Json::string(name_key)
  }
  if !website_url.is_empty() {
    obj["websiteUrl"] = Json::string(website_url)
  }
  if !api_key_url.is_empty() {
    obj["apiKeyUrl"] = Json::string(api_key_url)
  }
  if !category.is_empty() {
    obj["category"] = Json::string(category)
  }
  if is_official {
    obj["isOfficial"] = Json::boolean(true)
  }
  if is_partner {
    obj["isPartner"] = Json::boolean(true)
  }
  if !partner_promotion_key.is_empty() {
    obj["partnerPromotionKey"] = Json::string(partner_promotion_key)
  }
  if !icon.is_empty() {
    obj["icon"] = Json::string(icon)
  }
  match moon_provider_preset_form_json(app_type, name) {
    Some(form) => {
      obj["form"] = form
      obj["providerAppType"] = Json::string(app_type)
      if app_type == "codex" {
        obj["targetAppType"] = Json::string("moondesk")
        obj["targetAppLabel"] = Json::string("MoonDesk")
        obj["targetPriority"] = Json::number(0.0)
      }
    }
    None => ()
  }
  Json::object(obj)
}

///|
fn moon_provider_preset_form_json(app_type : String, name : String) -> Json? {
  match (app_type, name) {
    ("codex", "OpenAI Official") =>
      Some(
        {
          "templateLabel": Json::string("Codex OAuth"),
          "appType": Json::string("codex"),
          "id": Json::string("codex-oauth"),
          "name": Json::string("Codex OAuth"),
          "providerType": Json::string("codex_oauth"),
          "apiFormat": Json::string("openai"),
          "enabled": Json::boolean(true),
          "modelMapping": { "defaultModel": Json::string("gpt-5.6-sol") }.to_json(),
        }.to_json(),
      )
    ("codex", "火山Agentplan") =>
      Some(moon_ark_agent_plan_provider_form_json("codex", "openai"))
    ("claude", "火山Agentplan") =>
      Some(moon_ark_agent_plan_provider_form_json("claude", "anthropic"))
    _ => None
  }
}

///|
fn moon_ark_agent_plan_provider_form_json(
  app_type : String,
  api_format : String,
) -> Json {
  let anthropic = api_format == "anthropic"
  let mapping : Map[String, Json] = { "defaultModel": Json::string("kimi-k3") }
  if anthropic {
    mapping["sonnetModel"] = Json::string("kimi-k3")
    mapping["haikuModel"] = Json::string("kimi-k3")
    mapping["opusModel"] = Json::string("kimi-k3")
  }
  {
    "templateLabel": Json::string(
      if anthropic {
        "Ark Agent Plan / Kimi K3 / Anthropic Messages"
      } else {
        "Ark Agent Plan / Kimi K3 / OpenAI Responses"
      },
    ),
    "appType": Json::string(app_type),
    "id": Json::string(
      if anthropic {
        "ark-kimi-anthropic"
      } else {
        "ark-kimi-openai"
      },
    ),
    "name": Json::string(
      if anthropic {
        "Ark Kimi Anthropic"
      } else {
        "Ark Kimi OpenAI"
      },
    ),
    "providerType": Json::string(
      if anthropic {
        "anthropic-compatible"
      } else {
        "openai-compatible"
      },
    ),
    "baseUrl": Json::string("https://ark.cn-beijing.volces.com/api/plan/v3"),
    "apiFormat": Json::string(api_format),
    "enabled": Json::boolean(true),
    "modelMapping": Json::object(mapping),
  }.to_json()
}

///|
fn moon_provider_summary_slug(name : String) -> String {
  let out = StringBuilder::new()
  let lower = name.to_lower()
  let mut last_dash = false
  for i in 0..= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')
    if ok {
      out.write_char(ch.unsafe_to_char())
      last_dash = false
    } else if !last_dash {
      out.write_char('-')
      last_dash = true
    }
  }
  let slug = out.to_string().trim(chars="-")
  if slug.is_empty() {
    "preset"
  } else {
    slug.to_owned()
  }
}

///|
fn moon_unity2_base_preset(
  app_type : String,
  settings_config : Json,
) -> Map[String, Json] {
  {
    "appType": Json::string(app_type),
    "id": Json::string("\{app_type}:unity2"),
    "name": Json::string("Unity2.ai"),
    "websiteUrl": Json::string("https://unity2.ai"),
    "apiKeyUrl": Json::string("https://unity2.ai/register?source=moongate"),
    "settingsConfig": settings_config,
    "category": Json::string("aggregator"),
    "isPartner": Json::boolean(true),
    "partnerPromotionKey": Json::string("unity2"),
    "icon": Json::string("unity2"),
  }
}

///|
fn moon_unity2_claude_preset_json(app_type : String) -> Json {
  let obj = moon_unity2_base_preset(
    app_type,
    {
      "env": {
        "ANTHROPIC_BASE_URL": Json::string("https://api.unity2.ai"),
        "ANTHROPIC_AUTH_TOKEN": Json::string(""),
      }.to_json(),
    }.to_json(),
  )
  Json::object(obj)
}

///|
fn moon_unity2_claude_desktop_preset_json() -> Json {
  let obj = moon_unity2_base_preset("claude-desktop", Json::object({}))
  obj["baseUrl"] = Json::string("https://api.unity2.ai")
  obj["mode"] = Json::string("direct")
  obj["apiFormat"] = Json::string("anthropic")
  obj["modelRoutes"] = moon_unity2_claude_desktop_routes_json()
  Json::object(obj)
}

///|
fn moon_unity2_claude_desktop_routes_json() -> Json {
  {
    "claude-sonnet-4-6": {
      "model": Json::string("claude-sonnet-4-6"),
      "supports1m": Json::boolean(true),
    }.to_json(),
    "claude-opus-4-8": {
      "model": Json::string("claude-opus-4-8"),
      "supports1m": Json::boolean(true),
    }.to_json(),
    "claude-haiku-4-5": {
      "model": Json::string("claude-haiku-4-5"),
      "supports1m": Json::boolean(true),
    }.to_json(),
  }.to_json()
}

///|
fn moon_unity2_codex_preset_json() -> Json {
  let obj = moon_unity2_base_preset("codex", Json::object({}))
  obj["auth"] = { "OPENAI_API_KEY": Json::string("") }.to_json()
  obj["config"] = Json::string(
    "model_provider = \"custom\"\nmodel = \"gpt-5.5\"\nmodel_reasoning_effort = \"high\"\ndisable_response_storage = true\n\n[model_providers.custom]\nname = \"unity2\"\nbase_url = \"https://api.unity2.ai\"\nwire_api = \"responses\"\nrequires_openai_auth = true",
  )
  obj["endpointCandidates"] = Json::array([
    Json::string("https://api.unity2.ai"),
  ])
  Json::object(obj)
}

///|
fn moon_unity2_gemini_preset_json() -> Json {
  let obj = moon_unity2_base_preset(
    "gemini",
    {
      "env": {
        "GOOGLE_GEMINI_BASE_URL": Json::string("https://api.unity2.ai"),
        "GEMINI_MODEL": Json::string("gemini-3.1-pro"),
      }.to_json(),
    }.to_json(),
  )
  obj["baseURL"] = Json::string("https://api.unity2.ai")
  obj["model"] = Json::string("gemini-3.1-pro")
  obj["description"] = Json::string("Unity2.ai")
  Json::object(obj)
}

///|
fn moon_unity2_opencode_preset_json() -> Json {
  let obj = moon_unity2_base_preset(
    "opencode",
    {
      "npm": Json::string("@ai-sdk/openai-compatible"),
      "name": Json::string("Unity2.ai"),
      "options": {
        "baseURL": Json::string("https://api.unity2.ai/v1"),
        "apiKey": Json::string(""),
        "setCacheKey": Json::boolean(true),
      }.to_json(),
      "models": { "gpt-5.5": { "name": Json::string("GPT-5.5") }.to_json() }.to_json(),
    }.to_json(),
  )
  obj["templateValues"] = moon_api_key_template_values_json()
  Json::object(obj)
}

///|
fn moon_unity2_openclaw_preset_json() -> Json {
  let obj = moon_unity2_base_preset(
    "openclaw",
    {
      "baseUrl": Json::string("https://api.unity2.ai/v1"),
      "apiKey": Json::string(""),
      "api": Json::string("openai-completions"),
      "models": Json::array([
        {
          "id": Json::string("gpt-5.5"),
          "name": Json::string("GPT-5.5"),
          "contextWindow": Json::number(400000.0),
          "cost": { "input": Json::number(5.0), "output": Json::number(15.0) }.to_json(),
        }.to_json(),
      ]),
    }.to_json(),
  )
  obj["templateValues"] = moon_api_key_template_values_json()
  obj["suggestedDefaults"] = {
    "model": { "primary": Json::string("unity2/gpt-5.5") }.to_json(),
    "modelCatalog": {
      "unity2/gpt-5.5": { "alias": Json::string("GPT-5.5") }.to_json(),
    }.to_json(),
  }.to_json()
  Json::object(obj)
}

///|
fn moon_unity2_hermes_preset_json() -> Json {
  let obj = moon_unity2_base_preset(
    "hermes",
    {
      "name": Json::string("unity2"),
      "baseUrl": Json::string("https://api.unity2.ai/v1"),
      "apiKey": Json::string(""),
      "apiMode": Json::string("chat_completions"),
      "models": Json::array([
        {
          "id": Json::string("gpt-5.5"),
          "name": Json::string("GPT-5.5"),
          "context_length": Json::number(400000.0),
        }.to_json(),
      ]),
    }.to_json(),
  )
  obj["suggestedDefaults"] = {
    "model": {
      "default": Json::string("gpt-5.5"),
      "provider": Json::string("unity2"),
    }.to_json(),
  }.to_json()
  Json::object(obj)
}

///|
fn moon_api_key_template_values_json() -> Json {
  {
    "apiKey": {
      "label": Json::string("API Key"),
      "placeholder": Json::string(""),
      "editorValue": Json::string(""),
    }.to_json(),
  }.to_json()
}