{
    "title": "Validation Result",
    "description": "The results of validating a product against the Apple Style Guide.",
    "type": "object",
    "properties": {
        "validationTimestamp": { "type": "string", "format": "date-time" },
        "validationStatus": { "type": "string", "enum": ["PASS", "PASS_WITH_WARNINGS", "FAIL"] },
        "releaseId": { "type": "integer" },
        "upc": { "type": "string" },
        "validatorVersion": { "type": "string" },
        "genre": { "type": "string" },
        "releaseValidations": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "rule": { 
                        "type": "string",
                        "pattern": "^\\d+\\.\\d+ - .+$"
                    },
                    "status": { "type": "string", "enum": ["PASS", "WARNING", "FAIL", "NOT_APPLICABLE"] },
                    "severityLevel": { "type": "string", "enum": ["low", "medium", "high", "critical"] },
                    "message": { "type": "string" },
                    "field": { 
                        "type": "object",
                        "properties": {
                            "name": { "type": "string" },
                            "value": { "type": ["string", "number", "null"]}
                        },
                        "required": ["name", "value"]
                    }
                },
                "required": ["rule", "status", "severityLevel", "message" ,"field"]
            }
        },
        "trackValidations": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "trackNumber": { "type": "integer" },
                    "volumeNumber": { "type": "integer" },
                    "status": { "type": "string", "enum": ["PASS", "WARNING", "FAIL", "NOT_APPLICABLE"] },
                    "rules": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "rule": {
                                    "type": "string",
                                    "pattern": "^\\d+\\.\\d+ - .+$"
                                },
                                "status": { "type": "string", "enum": ["PASS", "WARNING", "FAIL", "NOT_APPLICABLE"] },
                                "severityLevel": { "type": "string", "enum": ["low", "medium", "high", "critical"] },
                                "message": { "type": "string" },
                                "field": { 
                                    "type": "object",
                                    "properties": {
                                        "name": { "type": "string" },
                                        "value": { "type": ["string", "number", "null"]}
                                    },
                                    "required": ["name", "value"]
                                }
                            },
                            "required": ["rule", "status", "severityLevel", "message" ,"field"]
                        }
                    }
                },
                "required": ["trackNumber", "volumeNumber", "status", "rules"]
            }
        },
        "summary": {
            "type": "object",
            "properties": {
                "totalRulesChecked": { "type": "integer" },
                "passed": { "type": "integer" },
                "warnings": { "type": "integer" },
                "failures": { "type": "integer" },
                "notApplicable": { "type": "integer" },
                "trackIssues": {
                    "type": "object",
                    "properties": {
                        "totalTracks": { "type": "integer" },
                        "tracksWithWarnings": { "type": "integer" },
                        "tracksWithErrors": { "type": "integer" }
                    },
                    "required": [
                        "totalTracks",
                        "tracksWithWarnings",
                        "tracksWithErrors"
                    ]
                }
            },
            "required": [
                "totalRulesChecked",
                "passed",
                "warnings",
                "failures",
                "notApplicable",
                "trackIssues"
            ]
        },
        "recommendations": {
            "type": "array",
            "items": { "type": "string" }
        }
    },
    "required": ["validationTimestamp", "summary", "recommendations", "releaseId", "upc", "genre"]
}