{
  "$schema": "http://json-schema.org/draft/2019-09/schema#",
  "title": "Bash script output validation schema",
  "type": "object",
  "properties": {
    "auto_fix_status": {
      "type": "string",
      "enum": ["success", "failure", "N/A", "api_side_fix", "no_auto_fix"]
    },
    "script_status": {
      "type": "string",
      "enum": ["started", "progress", "timeout"]
    },
    "force_report": {
      "enum": [true, false, "true", "false"]
    },
    "payload": {
      "type": "object",
      "anyOf": [
        { "$ref": "#/$defs/StartResult" },
        { "$ref": "#/$defs/GeneralCheck" },
        { "$ref": "#/$defs/DiskCheck" },
        { "$ref": "#/$defs/CPULoadCheck" },
        { "$ref": "#/$defs/EmailServiceCheck" },
        { "$ref": "#/$defs/BackupAgeCheck" },
        { "$ref": "#/$defs/MemoryCheck" },
        { "$ref": "#/$defs/DNSQueryCheck" }
      ]
    }
  },
  "required": ["payload"],
  "additionalProperties": false,
  "$defs": {
    "StartResult": {
      "title": "Script Run Status",
      "type": "object",
      "oneOf": [
        {
          "description": "Script execution has started",
          "required": ["script_status"],
          "properties": {
            "script_status": { "const": "started" }
          },
          "additionalProperties": false
        },
        {
          "description": "Script execution is in progress",
          "required": ["script_status"],
          "properties": {
            "script_status": { "const": "progress" }
          },
          "additionalProperties": false
        },
        {
          "description": "Script execution timed out",
          "required": ["script_status"],
          "properties": {
            "script_status": { "const": "timeout" }
          },
          "additionalProperties": false
        }
      ]
    },
    "GeneralCheck": {
      "title": "Service Status Result",
      "type": "object",
      "oneOf": [
        {
          "description": "Service is running normally",
          "required": ["service_status"],
          "properties": {
            "service_status": { "const": "ok" }
          },
          "additionalProperties": false
        },
        {
          "description": "Service was down but auto-fix succeeded",
          "required": ["service_status", "auto_fix_status"],
          "properties": {
            "service_status": { "const": "ok" },
            "auto_fix_status": { "const": "success" }
          },
          "additionalProperties": false
        },
        {
          "description": "Service is critical and auto-fix failed",
          "required": ["service_status", "auto_fix_status"],
          "properties": {
            "service_status": { "const": "critical" },
            "auto_fix_status": { "const": "failure" }
          },
          "additionalProperties": false
        }
      ]
    },
    "DiskCheck": {
      "title": "Disk Check Payload",
      "type": "object",
      "properties": {
        "service_status": {
          "type": "string",
          "enum": ["ok", "warning", "critical", "down", "disabled", "backup_in_progress", "backup_started"]
        },
        "auto_fix_status": {
          "type": "string",
          "enum": ["N/A", "no_auto_fix"]
        },
        "recommendations": { "type": "string" },
        "file_type": { "type": "string" },
        "file_data": { "type": "string" }
      },
      "patternProperties": {
        "^big_dirs_.+$": { "type": "string" },
        "^big_files_.+$": { "type": "string" },
        "^df_data_.+$": { "type": "string" },
        "^df_inodes_.+$": { "type": "string" },
        "^inodes_.+$": { "type": "string" }
      },
      "additionalProperties": false
    },
    "CPULoadCheck": {
      "title": "CPU Load Check Payload",
      "type": "object",
      "properties": {
        "service_status": {
          "type": "string",
          "enum": ["ok", "warning", "critical"]
        },
        "top_data": {
          "type": "string"
        },
        "cpu_load_reason": {
          "type": "string",
          "enum": ["mysql", "php_processes", "unknown"]
        },
        "ps_data": {
          "type": "string"
        },
        "recommendations": {
          "type": "string"
        },
        "auto_fix_status": {
          "type": "string",
          "enum": ["success", "failure"]
        },
        "apache_status": {
          "type": "string"
        }
      },
      "patternProperties": {
        "^.*_log_breakdown$": { "type": "string" }
      },
      "required": ["service_status", "top_data"],
      "additionalProperties": false
    },
    "EmailServiceCheck": {
      "title": "Email Service Check (SMTP/POP/IMAP)",
      "type": "object",
      "properties": {
        "service_status": {
          "type": "string",
          "enum": ["ok", "critical", "disabled"]
        },
        "auto_fix_status": {
          "type": "string",
          "enum": ["success", "failure"]
        },
        "configured_ports": {
          "type": "string"
        },
        "enabled_protocols": {
          "type": "string"
        }
      },
      "patternProperties": {
        "^[0-9]+$": { "type": "string" }
      },
      "required": ["service_status"],
      "additionalProperties": false
    },
    "BackupAgeCheck": {
      "title": "Backup Age Check",
      "type": "object",
      "properties": {
        "service_status": {
          "type": "string",
          "enum": ["ok", "critical", "disabled", "backup_in_progress", "backup_started"]
        },
        "nagios_data": {
          "type": "string"
        },
        "backup_status": {
          "type": "string"
        },
        "auto_fix_status": {
          "type": "string",
          "enum": ["N/A"]
        },
        "log_file": {
          "type": "string"
        }
      },
      "required": ["service_status", "nagios_data"],
      "additionalProperties": false
    },
    "MemoryCheck": {
      "title": "Memory/RAM Check",
      "type": "object",
      "properties": {
        "service_status": {
          "type": "string",
          "enum": ["ok", "critical"]
        },
        "ram_free": {
          "type": "string"
        },
        "ram_total": {
          "type": "string"
        },
        "free_percent": {
          "type": "string"
        },
        "auto_fix_status": {
          "type": "string",
          "enum": ["success", "failure", "no_auto_fix"]
        },
        "recommendations": {
          "type": "string"
        },
        "details": {
          "type": "string"
        }
      },
      "required": ["service_status", "ram_free", "ram_total", "free_percent"],
      "additionalProperties": false
    },
    "DNSQueryCheck": {
      "title": "DNS Query Check",
      "type": "object",
      "oneOf": [
        {
          "description": "DNS service is running and hostname is properly pointed",
          "required": ["service_status"],
          "properties": {
            "service_status": { "const": "ok" }
          },
          "additionalProperties": false
        },
        {
          "description": "DNS service was down but auto-fix succeeded",
          "required": ["service_status", "auto_fix_status"],
          "properties": {
            "service_status": { "const": "ok" },
            "auto_fix_status": { "const": "success" }
          },
          "additionalProperties": false
        },
        {
          "description": "DNS service is disabled manually",
          "required": ["service_status", "auto_fix_status"],
          "properties": {
            "service_status": { "const": "disabled" },
            "auto_fix_status": { "const": "no_auto_fix" }
          },
          "additionalProperties": false
        },
        {
          "description": "DNS service is critical with auto-fix failure",
          "required": ["service_status", "auto_fix_status"],
          "properties": {
            "service_status": { "const": "critical" },
            "auto_fix_status": { "const": "failure" },
            "dig_result": { "type": "string" },
            "named_rebuild_result": { "type": "string" }
          },
          "additionalProperties": false
        },
        {
          "description": "DNS service is down with hostname not pointed",
          "required": ["service_status", "dig_result"],
          "properties": {
            "service_status": { "const": "critical" },
            "dig_result": { "type": "string" }
          },
          "additionalProperties": false
        },
        {
          "description": "DNS service has duplicate zone issue with known reason",
          "required": ["service_status", "auto_fix_status", "dnq_query_issue_reason"],
          "properties": {
            "service_status": {
              "type": "string",
              "enum": ["ok", "critical"]
            },
            "auto_fix_status": {
              "type": "string",
              "enum": ["success", "failure"]
            },
            "dnq_query_issue_reason": {
              "type": "string",
              "enum": ["duplicate_definition_in_named_conf", "unknown"]
            },
            "named_rebuild_result": { "type": "string" }
          },
          "additionalProperties": false
        }
      ]
    }
  }
}
