{
    "$schema": "http://json-schema.org/schema#",
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "description": "The service type (should always be 'sqs')",
            "pattern": "^sqs$",
            "errorMessage": "Must equal 'sqs'"
        },
        "queue_type": {
            "type": "string",
            "description": "The type of queue can be 'regular' and 'fifo'",
            "pattern": "^regular|fifo$",
            "errorMessage": "Must equal 'regular' or 'fifo'"
        },
        "delay_seconds": {
            "type": "number",
            "errorMessage": "Must be a string"
        },
        "content_based_deduplication": {
            "type": "boolean",
            "errorMessage": "Must be a boolean"
        },
        "max_message_size": {
            "type": "number",
            "minimum": 0,
            "maximum": 262144,
            "errorMessage": "Must be a number between 0 and 262144"
        },
        "message_retention_period": {
            "type": "number",
            "minimum": 60,
            "maximum": 1209600,
            "errorMessage": "Must be a number between 60 and 1209600"
        },
        "receive_message_wait_time_seconds": {
            "type": "number",
            "minimum": 0,
            "maximum": 20,
            "errorMessage": "Must be a nuber between 0 and 20"
        },
        "visibility_timeout": {
            "type": "number",
            "minimum": 0,
            "maximum": 43200,
            "errorMessage": "Must be a number between 0 and 43200"
        },
        "dead_letter_queue": {
            "type": "object",
            "properties": {
                "max_receive_count":{
                    "type": "number",
                    "errorMessage": "Must be a number"
                },
                "delay_seconds": {
                    "type": "number",
                    "errorMessage": "Must be a number"
                },
                "max_message_size": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 262144,
                    "errorMessage": "Must be a number"
                },
                "message_retention_period": {
                    "type": "number",
                    "minimum": 60,
                    "maximum": 1209600,
                    "errorMessage": "Must be a number between 60 and 1209600"
                },
                "receive_message_wait_time_seconds": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 20,
                    "errorMessage": "Must be a number"
                },
                "visibility_timeout": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 43200,
                    "errorMessage": "Must be a number"
                }
            }
        },
        "event_consumers": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "service_name": {
                        "type": "string",
                        "errorMessage": "Must be a string"
                    },
                    "batch_size": {
                        "type": "number",
                        "minimum": 1,
                        "maximum": 10,
                        "errorMessage": "Must be a number between 1 and 10"
                    }
                },
                "required": [
                    "service_name",
                    "batch_size"
                ],
                "additionalProperties": false,
                "errorMessage": {
                    "required": {
                        "service_name": "The 'service_name' parameter is required in each config",
                        "batch_size": "The 'batch_size' parameter is required in each config"
                    },
                    "additionalProperties": "Invalid/Unknown property specified"
                }
                
            }
        },
        "tags": {
            "type": "object",
            "description": "An arbitrary list of key/value pairs to be added as tags to the service",
            "patternProperties": {
                "^.*$": {
                    "anyOf": [
                        {"type": "string"},
                        {"type": "number"}
                    ]
                }
            },
            "errorMessage": "Must contain 1 or more simple key/value pairs where the values are strings or numbers",
            "additionalProperties": false
        }
    },
    "required": [
        "type"
    ],
    "additionalProperties": false,
    "errorMessage": {
        "required": {
            "type": "The 'type' field is required"
        },
        "additionalProperties": "Invalid/Unknown property specified"
    }
}
