{
    "type": "tabs",
    "i18n": true,
    "items": {
        "dbTab": {
            "type": "panel",
            "label": "DB settings",
            "items": {
                "dockerMysql.enabled": {
                    "newLine": true,
                    "type": "checkDocker",
                    "label": "Use self-hosted MySQL in Docker",
                    "help": "docker_explanation",
                    "xs": 12
                },
                "dockerPhpMyAdmin.enabled": {
                    "newLine": true,
                    "type": "checkDocker",
                    "hideVersion": true,
                    "hidden": "!data.dockerMysql?.enabled",
                    "label": "Use self-hosted PhpMyAdmin in Docker",
                    "xs": 12
                },
                "dbtype": {
                    "type": "select",
                    "noTranslation": true,
                    "hidden": "!!data.dockerMysql?.enabled",
                    "options": [
                        { "label": "MySQL", "value": "mysql" },
                        { "label": "PostgreSQL", "value": "postgresql" },
                        { "label": "SQLite3", "value": "sqlite" },
                        { "label": "MS-SQL", "value": "mssql" }
                    ],
                    "label": "DB Type",
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },

                "host": {
                    "newLine": true,
                    "type": "text",
                    "label": "Host",
                    "hidden": "data.dbtype === 'sqlite' || !!data.dockerMysql?.enabled",
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },
                "port": {
                    "type": "number",
                    "label": "Port",
                    "hidden": "data.dbtype === 'sqlite' || !!data.dockerMysql?.enabled",
                    "min": 0,
                    "max": 65565,
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },
                "dbname": {
                    "type": "text",
                    "label": "DB Name",
                    "hidden": "data.dbtype === 'sqlite' || !!data.dockerMysql?.enabled",
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },

                "user": {
                    "newLine": true,
                    "type": "text",
                    "label": "User",
                    "hidden": "data.dbtype === 'sqlite' || !!data.dockerMysql?.enabled",
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },
                "password": {
                    "type": "password",
                    "label": "Password",
                    "repeat": true,
                    "hidden": "data.dbtype === 'sqlite' || !!data.dockerMysql?.enabled",
                    "sm": 12,
                    "md": 8,
                    "lg": 6
                },

                "fileName": {
                    "newLine": true,
                    "type": "text",
                    "label": "File for sqlite",
                    "hidden": "data.dbtype !== 'sqlite' || !!data.dockerMysql?.enabled",
                    "help": "Input path with the file name.",
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },
                "requestInterval": {
                    "type": "number",
                    "label": "requestInterval",
                    "hidden": "data.dbtype !== 'sqlite'",
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },

                "encrypt": {
                    "newLine": true,
                    "type": "checkbox",
                    "hidden": "data.dbtype === 'sqlite' || !!data.dockerMysql?.enabled",
                    "label": "Encrypt",
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },
                "rejectUnauthorized": {
                    "type": "checkbox",
                    "hidden": "data.dbtype === 'sqlite' || !!data.dockerMysql?.enabled",
                    "label": "Reject on SSL errors",
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },
                "multiRequests": {
                    "newLine": true,
                    "type": "checkbox",
                    "hidden": "data.dbtype === 'sqlite' || !!data.dockerMysql?.enabled",
                    "label": "Allow parallel requests",
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },
                "maxConnections": {
                    "type": "number",
                    "hidden": "data.dbtype === 'sqlite' || !!data.dockerMysql?.enabled",
                    "label": "Maximum concurrent connections",
                    "sm": 12,
                    "md": 4,
                    "lg": 3
                },
                "doNotCreateDatabase": {
                    "type": "checkbox",
                    "hidden": "data.dbtype === 'sqlite' || !!data.dockerMysql?.enabled",
                    "label": "Do not create database (already created)",
                    "sm": 12,
                    "md": 4,
                    "lg": 6
                },
                "_testConnection": {
                    "newLine": true,
                    "variant": "contained",
                    "color": "primary",
                    "disabled": "!_alive",
                    "type": "sendTo",
                    "error": {
                        "connect timeout": "Connection timeout"
                    },
                    "icon": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDMyIDMyIiB3aWR0aD0iNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KICAgIDxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0ibTIyLjk4NSAxMy42OTJoLS4wMTl2LTEuNzQ2YS44MjIuODIyIDAgMCAwIDAtLjEzOSAxIDEgMCAwIDAgLS4wMTEtLjE0NXYtNS4zNjhhLjcwOC43MDggMCAwIDAgMC0uMTM5IDIuNjQgMi42NCAwIDAgMCAtMS42MzQtMi4xNzFjLTEuNzUtLjk1NC01LjI2OS0xLjY0NS05LjMzLTEuNjQ1cy03LjU3OS42OTEtOS4zMjkgMS42NDVhMi42NCAyLjY0IDAgMCAwIC0xLjYzNSAyLjE2Ny43ODguNzg4IDAgMCAwIDAgLjEzNWwtLjAxIDUuNTIyYTEuMDQxIDEuMDQxIDAgMCAwIC4wMi4yNTZsLS4wMSA1LjRhLjg4NS44ODUgMCAwIDAgLjAxLjE5MWwtLjAxIDUuNDU1cy0uMTE4IDEuMTkgMS43ODQgMi4yNTVjMS4zMjguNzQ0IDMuOTU2IDEuNTM1IDkuMTg5IDEuNTM1YTM3LjA5MSAzNy4wOTEgMCAwIDAgNC43MTUtLjI2NCA3Ljk5MyA3Ljk5MyAwIDEgMCA2LjI2OC0xMi45NDV6bS0xOS42NjEtNy43NzJhNC43MDYgNC43MDYgMCAwIDEgLjk4Ni0uNDk0IDIzLjExMiAyMy4xMTIgMCAwIDEgNy42ODEtMS4wODcgMjMuMTExIDIzLjExMSAwIDAgMSA3LjY4MSAxLjA4NyA0LjczOSA0LjczOSAwIDAgMSAuOTg3LjQ5NCAxLjcgMS43IDAgMCAxIC4yMzIuMjA5IDIuMjc2IDIuMjc2IDAgMCAxIC0uMzE4LjMxOCA0Ljk4NCA0Ljk4NCAwIDAgMSAtLjkuNDM4IDIzLjE0IDIzLjE0IDAgMCAxIC03LjY4MSAxLjA4NiAyMy4xNDEgMjMuMTQxIDAgMCAxIC03LjY4Mi0xLjA4NiA1LjAxOSA1LjAxOSAwIDAgMSAtLjktLjQzOCAyLjMzNCAyLjMzNCAwIDAgMSAtLjMxOC0uMzE4IDEuNzcgMS43NyAwIDAgMSAuMjMyLS4yMDl6bS0uMyAyLjY0M2MxLjM4Ny43IDQuMDA1IDEuNDA4IDguOTY4IDEuNDA4czcuNTc1LS43IDguOTY0LTEuNDA2djMuMTEyYTIuMzE2IDIuMzE2IDAgMCAxIC0uNzM3LjY0N2MtMS4xNzQuNjY0LTMuNTMgMS4yNzktOC4yMjcgMS4yNzktNC42NjkgMC03LjAyOC0uNjE2LTguMjEyLTEuMjhhMi40NTUgMi40NTUgMCAwIDEgLS43NS0uNjQ2cTAtLjAzNi0uMDEyLS4wNzJ6bTguOTc2IDE2LjMzN2MtNC42NyAwLTcuMDI5LS42MTctOC4yMTMtMS4yODFhMi40MzggMi40MzggMCAwIDEgLS43NjItLjY2MmwuMDA2LTMuMWMxLjM4OC43IDQuMDA2IDEuNDA4IDguOTY5IDEuNDA4IDEuMTE3IDAgMi4xMTItLjAzNSAzLS4xLS4wMTEuMTY3LS4wMTYuMzM1LS4wMTYuNTA1YTcuOTM4IDcuOTM4IDAgMCAwIC42MTUgMy4wNzJjLTEuMDE4LjEwMy0yLjIwOC4xNTgtMy41OTkuMTU4em0zLjQtNS43OGMtLjk3NS4wODUtMi4xLjEzNC0zLjQuMTM0LTQuNjcgMC03LjAyOS0uNjE2LTguMjEzLTEuMjhhMi40MjkgMi40MjkgMCAwIDEgLS43NjEtLjY2MmwuMDA2LTMuMWMxLjM4OC43IDQuMDA2IDEuNDA4IDguOTY5IDEuNDA4YTMwLjIyMyAzMC4yMjMgMCAwIDAgNi41MzktLjU4NSA4LjAyIDguMDIgMCAwIDAgLTMuMTQgNC4wODZ6bTcuNTgxIDguNTRhNS45ODggNS45ODggMCAwIDEgLTUuODUxLTcuMzE1Yy4wMDYtLjAxOS4wMTEtLjAzOS4wMTYtLjA1OHMuMDA5LS4wMzkuMDEyLS4wNTlhNiA2IDAgMSAxIDUuODIzIDcuNDMyeiIvPg0KICAgIDxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0ibTE5LjYzOSAyMS45YTEgMSAwIDAgMCAxLjQxOCAxLjQxMSAyLjYyOCAyLjYyOCAwIDAgMSAzLjcyNSAwIDEgMSAwIDAgMCAxLjQxOC0xLjQxMSA0LjYyOCA0LjYyOCAwIDAgMCAtNi41NjEgMHoiLz4NCiAgICA8ZWxsaXBzZSBmaWxsPSJjdXJyZW50Q29sb3IiIGN4PSIyMi45ODUiIGN5PSIyNC44NDMiIHJ4PSIxLjY2NyIgcnk9IjEuNjc0Ii8+DQogICAgPHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJtMjcuOTc5IDE5Ljc2OGE3LjA0NSA3LjA0NSAwIDAgMCAtOS45ODggMCAxIDEgMCAxIDAgMS40MTcgMS40MTIgNS4wNDUgNS4wNDUgMCAwIDEgNy4xNTQgMCAxIDEgMCAxIDAgMS40MTctMS40MTJ6Ii8+DQo8L3N2Zz4=",
                    "command": "test",
                    "jsonData": "{\"config\": {\"dbtype\": \"${data.dbtype}\", \"port\": \"${data.port}\", \"host\": \"${data.host}\", \"user\": \"${data.user}\", \"fileName\": \"${data.fileName}\", \"password\": \"${data.password}\", \"encrypt\": ${data.encrypt}, \"rejectUnauthorized\": ${data.rejectUnauthorized}}}",
                    "label": "Test connection"
                },

                "_resetDB": {
                    "type": "sendTo",
                    "variant": "outlined",
                    "color": "primary",
                    "icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjODAxMTExIiBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIvPjwvc3ZnPgkJCQkJCQkJ",
                    "disabled": "!_alive",
                    "result": {
                        "deleted": "Deleted! Restarting..."
                    },
                    "confirm": {
                        "text": "Are you sure? All data will be dropped.",
                        "title": "Please confirm",
                        "ok": "Delete",
                        "cancel": "Cancel"
                    },
                    "command": "destroy",
                    "label": "Reset DB"
                },

                "writeNulls": {
                    "newLine": true,
                    "type": "checkbox",
                    "label": "Write NULL values on start/stop boundaries",
                    "sm": 12
                }
            }
        },
        "defaultTab": {
            "type": "panel",
            "label": "Default settings",
            "items": {
                "debounceTime": {
                    "newLine": true,
                    "type": "number",
                    "sm": 12,
                    "md": 4,
                    "min": 0,
                    "max": 86400000,
                    "label": "De-bounce time",
                    "help": "De-bounce interval(ms)"
                },
                "blockTime": {
                    "type": "number",
                    "sm": 12,
                    "md": 4,
                    "min": 0,
                    "max": 86400000,
                    "label": "Block time",
                    "defaultFunc": "(data.debounce || data.debounce === '0' || data.debounce === 0) ? parseInt(data.debounce, 10) : 0",
                    "help": "blockTime"
                },
                "changesRelogInterval": {
                    "newLine": true,
                    "type": "number",
                    "label": "log changes interval(s)",
                    "help": "0 = disable",
                    "sm": 12,
                    "md": 6,
                    "lg": 4
                },
                "changesMinDelta": {
                    "type": "number",
                    "label": "log changes minimal delta",
                    "help": "0 = disable delta check",
                    "sm": 12,
                    "md": 6,
                    "lg": 4
                },
                "retention": {
                    "newLine": true,
                    "type": "select",
                    "label": "retention",
                    "options": [
                        {
                            "value": 0,
                            "label": "keep forever"
                        },
                        {
                            "value": 63072000,
                            "label": "2 years"
                        },
                        {
                            "value": 31536000,
                            "label": "1 year"
                        },
                        {
                            "value": 15811200,
                            "label": "6 months"
                        },
                        {
                            "value": 7948800,
                            "label": "3 months"
                        },
                        {
                            "value": 2678400,
                            "label": "1 months"
                        },
                        {
                            "value": 1209600,
                            "label": "2 weeks"
                        },
                        {
                            "value": 604800,
                            "label": "1 week"
                        },
                        {
                            "value": 432000,
                            "label": "5 days"
                        },
                        {
                            "value": 259200,
                            "label": "3 days"
                        },
                        {
                            "value": 86400,
                            "label": "1 day"
                        },
                        {
                            "value": -1,
                            "label": "Custom timeframe"
                        }
                    ],
                    "sm": 12,
                    "md": 6,
                    "lg": 4
                },
                "customRetentionDuration": {
                    "type": "number",
                    "label": "Custom retention duration (days)",
                    "min": 1,
                    "sm": 12,
                    "md": 4,
                    "hidden": "(data.retention !== -1)",
                    "help": "Number of days to keep the data."
                },
                "maxLength": {
                    "newLine": true,
                    "type": "number",
                    "label": "maximum datapoint count in RAM",
                    "min": 0,
                    "max": 100000,
                    "sm": 12,
                    "md": 4
                },
                "round": {
                    "newLine": true,
                    "type": "text",
                    "label": "Round real to",
                    "sm": 12,
                    "md": 4,
                    "lg": 3,
                    "validator": "((data.round || '').toString().length === 0) || isFinite(data.round)",
                    "validatorErrorText": "Enter a number or leave the field empty",
                    "validatorNoSaveOnError": true
                },
                "writeNulls": {
                    "newLine": true,
                    "label": "Write NULL values on start/stop boundaries",
                    "type": "checkbox",
                    "sm": 12,
                    "md": 4
                },
                "disableSkippedValueLogging": {
                    "label": "Disable charting optimized logging of skipped values",
                    "type": "checkbox",
                    "sm": 12,
                    "md": 4
                },
                "enableDebugLogs": {
                    "newLine": true,
                    "label": "Enable enhanced debug logs for the datapoint",
                    "type": "checkbox",
                    "sm": 12,
                    "md": 4
                },
                "debounce": {
                    "type": "number",
                    "sm": 12,
                    "md": 4,
                    "min": 0,
                    "label": "De-bounce time",
                    "help": "debounce",
                    "hidden": "true"
                }
            }
        },
        "dataTab": {
            "type": "panel",
            "label": "Data browser",
            "items": {
                "_dataBrowser": {
                    "type": "custom",
                    "i18n": true,
                    "url": "custom/customComponents.js",
                    "name": "SqlComponentsSet/Components/DataBrowser",
                    "guiApi": 2,
                    "sm": 12
                }
            }
        },
        "dockerMysql": {
            "type": "panel",
            "label": "MySQL Docker",
            "hidden": "!data.dockerMysql?.enabled",
            "items": {
                "dockerMysql.bind": {
                    "newLine": true,
                    "listenOnAllPorts": true,
                    "type": "ip",
                    "label": "Start container on IP",
                    "sm": 12,
                    "md": 8
                },
                "dockerMysql.port": {
                    "type": "port",
                    "label": "Port",
                    "help": "The port on which the container will be reachable on localhost",
                    "default": 3306,
                    "sm": 12,
                    "md": 4
                },
                "dockerMysql.stopIfInstanceStopped": {
                    "newLine": true,
                    "type": "checkbox",
                    "label": "Stop container when instance stops",
                    "sm": 12,
                    "md": 6
                },
                "dockerMysql.autoImageUpdate": {
                    "type": "checkbox",
                    "label": "Auto-update Docker image",
                    "help": "If enabled, the latest Docker image will be pulled when the adapter starts.",
                    "sm": 12,
                    "md": 6
                },
                "dockerMysql.rootPassword": {
                    "newLine": true,
                    "type": "password",
                    "label": "Root password",
                    "xs": 12
                }
            }
        },
        "dockerPhpMyAdmin": {
            "type": "panel",
            "label": "Grafana Docker",
            "hidden": "!data.dockerPhpMyAdmin?.enabled || !data.dockerMysql?.enabled",
            "items": {
                "dockerPhpMyAdmin.bind": {
                    "type": "ip",
                    "label": "Start container on IP",
                    "listenOnAllPorts": true,
                    "sm": 12,
                    "md": 8
                },
                "dockerPhpMyAdmin.port": {
                    "type": "port",
                    "label": "Port",
                    "help": "The port on which the container will be reachable on localhost",
                    "default": 8080,
                    "sm": 12,
                    "md": 4
                },
                "dockerPhpMyAdmin.stopIfInstanceStopped": {
                    "newLine": true,
                    "type": "checkbox",
                    "hidden": "!!data.dockerMysql?.stopIfInstanceStopped",
                    "label": "Stop container when instance stops",
                    "sm": 12,
                    "md": 6
                },
                "dockerPhpMyAdmin.autoImageUpdate": {
                    "type": "checkbox",
                    "label": "Auto-update Docker image",
                    "help": "If enabled, the latest Docker image will be pulled when the adapter starts.",
                    "sm": 12,
                    "md": 6
                },
                "dockerPhpMyAdmin.absoluteUri": {
                    "newLine": true,
                    "type": "text",
                    "label": "Root URL",
                    "help": "Defines the root URL, useful when PhpMyAdmin is behind a reverse proxy.",
                    "xs": 12
                }
            }
        }
    }
}
