{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "Outpack metadata schema",
    "description": "This is the minimal schema, it is expected that implementations will want and need additional fields throughout",
    "version": "0.1.1",

    "type": "object",
    "properties": {
        "schema_version": {
            "description": "Schema version, used to manage migrations",
            "type": "string",
            "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
        },

        "id": {
            "$ref": "packet-id.json"
        },

        "name": {
            "description": "Packet name. No restrictions on contents",
            "type": "string"
        },

        "parameters": {
            "description": "Packet parameters, used when running and for querying. Parameters may only be simple types",
            "oneOf": [
                {
                    "type": "null"
                },
                {
                    "type": "object",
                    "additionalProperties": {
                        "type": ["boolean", "number", "string"]
                    }
                }
            ]
        },

        "time": {
            "description": "Information about the running time",
            "start": {
                "description": "Time that the report was started, in seconds since 1970-01-01",
                "type": "number"
            },
            "end": {
                "description": "Time that the report was completed, in seconds since 1970-01-01",
                "type": "number"
            },
            "required": ["start", "end"],
            "additionalProperties": {
                "type": "number"
            }
        },

        "files": {
            "description": "Manifest of files present in this packet",
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "path": {
                        "description": "The path of the file",
                        "$ref": "relative-path.json"
                    },
                    "hash": {
                        "$ref": "hash.json"
                    },
                    "size": {
                        "description": "The file size, in bytes",
                        "type": "number"
                    }
                },
                "required": ["path", "hash", "size"]
            }
        },

        "depends": {
            "description": "Information on dependencies",
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "packet": {
                        "$ref": "packet-id.json"
                    },
                    "query": {
                        "type": "string"
                    },
                    "files": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "here": {
                                    "description": "The path of the file in this packet",
                                    "$ref": "relative-path.json"
                                },
                                "there": {
                                    "description": "The path of the file within the upstream packet",
                                    "$ref": "relative-path.json"
                                }
                            },
                            "required": ["here", "there"]
                        }
                    }
                },
                "required": ["packet", "query", "files"]
            }
        },

        "custom": {
            "description": "Optional custom metadata, grouped under application keys",
            "type": ["null", "object"]
        },

        "git": {
            "oneOf": [
                { "type": "null" },
                { "$ref": "git.json" }
            ]
        }
    },
    "required": ["schema_version", "id", "name", "parameters", "time", "files", "depends", "custom", "git"]
}
