{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "https://chaosinitiative.com/cas/schemas/root.json",

    "type": "object",
    "title": "Configuration",
    "description": "Root AssetBuilder configuration",
    
    "required": ["options", "subsystems"],
    "properties": {
        "options": {
            "type": "object",
            "title": "Options",
            "description": "Global configuration options",
            
            "required": ["project"],
            "properties": {
                "project": {
                    "description": "The project namespace for your game or mod.",
                    "type": "string"
                },
                "bin_path": {
                    "description": "The location to source binaries from.",
                    "type": "string"
                },
                "bin_appid": {
                    "description": "The AppID of the app to source binaries from.",
                    "type": "integer"
                }
            }
        },
        "subsystems": {
            "type": "object",
            "title": "Subsystems",
            "description": "Key-value dictionary of subsystem instances to run.",
            
            "properties": {
                "@conditions": { "type": "object", "additionalProperties": true }
            },
            "additionalProperties": { "$ref": "#/definitions/subsystem" }
        }
    },

    "definitions": {
        "subsystem": {
            "title": "Subsystem",
            "description": "An entry to run a specific subsystem.",

            "type": "object",
            "required": ["module", "categories"],
            "properties": {
                "module": {
                    "type": "string",
                    "title": "Module",
                    "description": "The Python module to load.",
                    
                    "examples": ["assetbuilder.subsystems.buildsys"]
                },
                "categories": {
                    "type": "array",
                    "title": "Categories",
                    "description": "The categories this subsystem should run for.",
                    
                    "examples": ["code"],
                    "items": { "type": "string" }
                },
                "build_types": {
                    "type": "array",
                    "title": "Build Types",
                    "description": "The build types this subsystem should run for.",
                    
                    "examples": [["staging", "release"]],
                    "items": {
                        "type": "string",
                        "enum": ["trunk", "staging", "release"]
                    }
                },
                "before_assets": {
                    "type": "boolean",
                    "title": "Before Assets",
                    "description": "Whether this subsystem should run before the asset build.",
                    
                    "default": false
                },
                "options": {
                    "type": "object",
                    "title": "Options",
                    "description": "Options to pass to the subsystem.",
                    
                    "additionalProperties": true,
                    "examples": [{"foobar": 1234}]
                }
            }
        }
    }
}