# Budget Validator
# Validates cost tracking and budget configuration

{
  # Validate role budget is positive
  is_valid_budget = fun cents =>
    cents > 0,

  # Validate threshold percentage
  is_valid_threshold = fun percent =>
    percent >= 0 && percent <= 100,

  # Validate budget window is recognized
  is_valid_window = fun window =>
    let valid_windows = ["daily", "weekly", "monthly"] in
    std.array.contains valid_windows window,

  # Validate role budget limits
  validate_role_limits = fun limits =>
    let architect_valid = is_valid_budget limits.architect_cents in
    let developer_valid = is_valid_budget limits.developer_cents in
    let reviewer_valid = is_valid_budget limits.reviewer_cents in
    let testing_valid = is_valid_budget limits.testing_cents in
    {
      valid = architect_valid && developer_valid && reviewer_valid && testing_valid,
      errors = [] |> (if !architect_valid then ["architect_cents must be > 0"] else [])
                   |> (if !developer_valid then ["developer_cents must be > 0"] else [])
                   |> (if !reviewer_valid then ["reviewer_cents must be > 0"] else [])
                   |> (if !testing_valid then ["testing_cents must be > 0"] else []),
    },

  # Validate threshold percentage
  validate_threshold = fun percent =>
    if is_valid_threshold percent then
      {valid = true}
    else
      {
        valid = false,
        error = "Threshold must be between 0 and 100, got %{std.string.from_number percent}",
      },
}
