# Route Configuration Type Contracts
#
# Defines the schema for route configuration with validation rules.
# Used by both en.ncl and es.ncl to ensure type safety and consistency.

{
  # Single route configuration
  Route = {
    # Required fields
    component
      | String
      | doc "Component name (e.g., 'Home', 'About', 'Services')",

    path
      | String
      | doc "URL path (e.g., '/', '/about', '/services')",

    language
      | String
      | doc "Language code (ISO 639-1, e.g., 'en', 'es')",

    title_key
      | String
      | doc "i18n key for page title",

    description_key
      | String
      | doc "i18n key for page description",

    # Optional fields with defaults
    enabled
      | Bool
      | doc "Whether this route is active"
      | default = true,

    canonical_path
      | String
      | doc "Canonical URL path for this route"
      | optional,

    keywords
      | Array String
      | doc "SEO keywords for this page"
      | default = [],

    lang_prefixes
      | Array String
      | doc "i18n key prefixes (e.g., ['home-', 'welcome-'])"
      | default = [],

    menu_group
      | String
      | doc "Menu grouping (e.g., 'main', 'footer', 'admin')"
      | default = "main",

    menu_icon
      | String
      | doc "Icon identifier for menu item"
      | optional,

    menu_order
      | Number
      | doc "Display order within menu group (lower = higher priority)"
      | default = 999,

    page_component
      | String
      | doc "Leptos component name (e.g., 'HomePage')"
      | optional,

    unified_component
      | String
      | doc "Unified component name for SSR/WASM delegation"
      | optional,

    module_path
      | String
      | doc "Module path for component (e.g., 'services')"
      | optional,

    priority
      | Number
      | doc "SEO/sitemap priority (0.0 to 1.0)"
      | default = 0.8,

    show_in_sitemap
      | Bool
      | doc "Whether to include in sitemap.xml"
      | default = true,

    generate_boilerplate_only
      | Bool
      | doc "Only generate boilerplate code (no full implementation)"
      | default = false,

    replace_existing_boilerplate
      | Bool
      | doc "Replace existing boilerplate if it exists"
      | default = false,

    is_external
      | Bool
      | doc "Whether this is an external URL"
      | default = false,

    component_dynamic
      | Bool
      | doc "Whether component is dynamically loaded"
      | default = false,

    content_type_param
      | Bool
      | doc "Whether route accepts content_type parameter"
      | default = false,

    # Dynamic properties (extensible)
    props
      | { _ : Dyn }
      | doc "Additional dynamic properties (e.g., content_type, style)"
      | optional,
  },

  # Container for all routes
  RoutesFile = {
    routes
      | Array Route
      | doc "List of all route configurations",
  },
}
