{
    "title": "Game Server",
    "type": "object",
    "required": [
        "name",
        "type",
        "host",
        "port"
    ],
    "properties": {
        "name": {
            "title": "Name",
            "type": "string",
            "minLength": 1,
            "options": {
                "grid_columns": 12
            }
        },
        "type": {
            "title": "GameDig type",
            "description": "Check the <a href=\"https://github.com/gamedig/node-gamedig/blob/master/GAMES_LIST.md\">GameDig games list</a> for requirements.",
            "type": "string",
            "minLength": 1,
            "options": {
                "grid_columns": 3
            },
            "$ref": "gamedig-games"
        },
        "host": {
            "title": "Host name or IP",
            "type": "string",
            "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\\-]*[A-Za-z0-9])$",
            "options": {
                "grid_columns": 3,
                "error_messages": {
                    "en": {
                      "error_pattern": "Value must be a valid host name or IP"
                    }
                }
            }
        },
        "port": {
            "title": "Port number",
            "type": "integer",
            "minimum": 1,
            "maximum": 65535,
            "format": "number",
            "options": {
                "grid_columns": 3
            }
        },
        "appId": {
            "title": "Steam App ID",
            "description": "Look for the <i>AppID</i> in the <a href=\"https://steamdb.info/apps/\">apps list</a>.",
            "type": "integer",
            "minimum": 1,
            "format": "number",
            "options": {
                "grid_columns": 3
            }
        },
        "discord": {
            "type": "array",
            "title": "Discord channels",
            "description": "The simplest way to get a discord channel ID is to enable developer mode in settings, then right clicking on the channel name will give you the <b>Copy ID</b> option.",
            "minItems": 0,
            "uniqueItems": true,
            "items": {
                "type": "object",
                "title": "Channel",
                "required": [
                    "channelId"
                ],
                "properties": {
                    "channelId": {
                        "title": "Channel ID",
                        "type": "string"
                    },
                    "showPlayersList": {
                        "title": "Show players list",
                        "default": true,
                        "type": "boolean",
                        "format": "checkbox"
                    },
                    "showGraph": {
                        "title": "Show graph",
                        "default": true,
                        "type": "boolean",
                        "format": "checkbox"
                    },
                    "onlineColor": {
                        "title": "Online color",
                        "default": "#000000",
                        "type": "string",
                        "format": "color"
                    },
                    "offlineColor": {
                        "title": "Offline color",
                        "default": "#ff0000",
                        "type": "string",
                        "format": "color"
                    }
                }
            },
            "format": "table",
            "options": {
                "grid_columns": 12
            }
        },
        "telegram": {
            "type": "array",
            "title": "Telegram chats",
            "description": "The simplest way to get a telegram chat ID is to invite <a target=\"_blank\" href=\"https://telegram.me/getidsbot\">@getidsbot</a> and use <code>/start</code> to make it post (among other data) the chat ID.",
            "minItems": 0,
            "uniqueItems": true,
            "items": {
                "type": "object",
                "title": "Chat",
                "required": [
                    "chatId"
                ],
                "properties": {
                    "chatId": {
                        "type": "string",
                        "title": "Chat ID"
                    },
                    "showPlayersList": {
                        "title": "Show players list",
                        "default": true,
                        "type": "boolean",
                        "format": "checkbox"
                    },
                    "showGraph": {
                        "title": "Show graph",
                        "default": true,
                        "type": "boolean",
                        "format": "checkbox"
                    }
                }
            },
            "format": "table",
            "options": {
                "grid_columns": 12
            }
        },
        "slack": {
            "type": "array",
            "title": "Slack channels",
            "description": "The simplest way to get a slack channel ID is to right click on the channel name, then go to <b>View channel details</b> and scroll down to the very bottom where you can copy the <i>Channel ID</i>.",
            "minItems": 0,
            "uniqueItems": true,
            "items": {
                "type": "object",
                "title": "Channel",
                "required": [
                    "channelId"
                ],
                "properties": {
                    "channelId": {
                        "title": "Channel ID",
                        "type": "string"
                    },
                    "showPlayersList": {
                        "title": "Show players list",
                        "default": true,
                        "type": "boolean",
                        "format": "checkbox"
                    },
                    "showGraph": {
                        "title": "Show graph",
                        "default": true,
                        "type": "boolean",
                        "format": "checkbox"
                    }
                }
            },
            "format": "table",
            "options": {
                "grid_columns": 12
            }
        },
        "graphHistoryHours": {
            "title": "Graph history time span (hours)",
            "type": "integer",
            "default": 12,
            "minimum": 1,
            "maximum": 24,
            "format": "range",
            "options": {
                "grid_columns": 12
            }
        },
        "timezoneOffset": {
            "title": "Time zone offset of the server",
            "default": 0,
            "type": "number",
            "minimum": -12,
            "maximum": 14,
            "format": "range",
            "options": {
                "grid_columns": 12
            }
        },
        "infoText": {
            "title": "Info text",
            "type": "string",
            "format": "markdown",
            "options": {
                "simplemde": {
                    "autorefresh": true,
                    "spellChecker": false,
                    "toolbar": [
                        "bold",
                        "italic",
                        "strikethrough",
                        "|",
                        "unordered-list",
                        "ordered-list",
                        "|",
                        "code",
                        "link",
                        "quote",
                        "|",
                        "preview",
                        "side-by-side",
                        "fullscreen"
                      ]
                }
            }
        },
        "givenPortOnly": {
            "title": "givenPortOnly",
            "description": "Only attempt to query server on given port.",
            "type": "boolean",
            "format": "checkbox",
            "options": {
                "grid_columns": 3
            }
        },
        "requestRules": {
            "title": "requestRules (Valve)",
            "description": "Additional server info may be fetched into the <code>raw</code> field.",
            "type": "boolean",
            "format": "checkbox",
            "options": {
                "grid_columns": 3
            }
        },
        "requestRulesRequired": {
            "title": "requestRulesRequired (Valve)",
            "description": "<code>requestRules</code> is always required to have a response or the query will timeout.",
            "type": "boolean",
            "format": "checkbox",
            "options": {
                "grid_columns": 3
            }
        },
        "requestPlayersRequired": {
            "title": "requestPlayersRequired (Valve)",
            "description": "Querying players is always required to have a response or the query will timeout. Some <a href=\"https://github.com/gamedig/node-gamedig/blob/master/GAMES_LIST.md\">games</a> may not provide a players response.",
            "type": "boolean",
            "format": "checkbox",
            "options": {
                "grid_columns": 3
            }
        },
        "teamspeakQueryPort": {
            "title": "teamspeakQueryPort (TeamSpeak 3)",
            "type": "integer",
            "minimum": 1,
            "maximum": 65535,
            "format": "number",
            "options": {
                "grid_columns": 3
            }
        },
        "guildId": {
            "title": "guildId (Discord)",
            "type": "string",
            "options": {
                "grid_columns": 3
            }
        },
        "login": {
            "title": "login (Nadeo)",
            "type": "string",
            "options": {
                "grid_columns": 3
            }
        },
        "password": {
            "title": "password (Nadeo)",
            "type": "string",
            "options": {
                "grid_columns": 3
            }
        },
        "token": {
            "title": "token (Terraria)",
            "type": "string",
            "options": {
                "grid_columns": 3
            }
        }
    },
    "format": "grid-strict",
    "headerTemplate": "{{#self.name}}{{self.name}}{{/self.name}}{{^self.name}}{{self.type}}:{{self.host}}:{{self.port}}{{/self.name}}"
}
