# Common Constraints and Validation Rules

let limits = import "../values/limits.ncl" in
let ranges = import "../values/ranges.ncl" in

{
  # Port constraints
  valid_port = fun port =>
    port >= limits.port.min && port <= limits.port.max,

  # Valid log level constraint
  valid_log_level = fun level =>
    std.array.contains ranges.log_levels level,

  # Valid auth method
  valid_auth_method = fun method =>
    std.array.contains ranges.auth_methods method,

  # Valid storage backend
  valid_storage_backend = fun backend =>
    std.array.contains ranges.storage_backends backend,

  # Valid deployment mode
  valid_deployment_mode = fun mode =>
    std.array.contains ranges.deployment_modes mode,

  # Valid LLM provider
  valid_llm_provider = fun provider =>
    std.array.contains ranges.llm_providers provider,

  # Budget threshold constraint (0-100)
  valid_budget_threshold = fun percent =>
    percent >= 0 && percent <= 100,

  # Worker count constraint
  valid_worker_count = fun count =>
    count >= limits.workers.min && count <= limits.workers.max,

  # Connection count constraint
  valid_connection_count = fun count =>
    count >= limits.connections.min,

  # URL format validation (basic)
  valid_url = fun url =>
    std.string.length url > 0 && (
      std.string.starts_with "http://" url
      || std.string.starts_with "https://" url
      || std.string.starts_with "ws://" url
      || std.string.starts_with "wss://" url
      || std.string.starts_with "file://" url
    ),
}
