{
  "pluginAlias": "TSVESyncPlatform",
  "pluginType": "platform",
  "singular": true,
  "headerDisplay": "Homebridge plugin for VeSync devices including Levoit air purifiers humidifiers and Etekcity smart outlets.",
  "footerDisplay": "For help please visit the [GitHub repository](https://github.com/mickgiles/homebridge-tsvesync).",
  "schema": {
    "type": "object",
    "properties": {
      "name": {
        "title": "Name",
        "type": "string",
        "default": "TSVESync",
        "required": true
      },
      "username": {
        "title": "VeSync Username",
        "type": "string",
        "required": true,
        "description": "Your VeSync account email address"
      },
      "password": {
        "title": "VeSync Password",
        "type": "string",
        "required": true,
        "description": "Your VeSync account password"
      },
      "updateInterval": {
        "title": "Update Interval",
        "type": "integer",
        "default": 30,
        "minimum": 10,
        "maximum": 600,
        "description": "How often to update device status (in seconds)"
      },
      "debug": {
        "title": "Debug Mode",
        "type": "boolean",
        "default": false,
        "description": "Enable debug logging"
      },
      "apiUrl": {
        "title": "API URL",
        "type": "string",
        "description": "Custom VeSync API URL (advanced users only)"
      },
      "countryCode": {
        "title": "Country Code",
        "type": "string",
        "default": "US",
        "description": "Your country code (required for proper authentication). Select your actual country.",
        "enum": [
          "DZ", "AR", "AU", "AT", "BH", "BY", "BE", "BO", "BR", "BG", "CA", "CL", "CN", "CO", "HR", "CZ", "DK", "EC", "EG", "EE", "FI", "FR", "DE", "GR", "HK", "HU", "IS", "IN", "ID", "IE", "IL", "IT", "JP", "JO", "KZ", "KE", "KW", "LV", "LB", "LT", "MY", "MX", "MA", "NL", "NZ", "NG", "NO", "OM", "PY", "PE", "PH", "PL", "PT", "QA", "RO", "RU", "SA", "SG", "SK", "SI", "ZA", "KR", "ES", "SE", "CH", "TW", "TH", "TN", "TR", "UA", "AE", "GB", "US", "UY", "UZ", "VE", "VN"
        ],
        "x-schema-form": {
          "type": "select",
          "titleMap": [
            { "value": "DZ", "name": "Algeria" },
            { "value": "AR", "name": "Argentina" },
            { "value": "AU", "name": "Australia" },
            { "value": "AT", "name": "Austria" },
            { "value": "BH", "name": "Bahrain" },
            { "value": "BY", "name": "Belarus" },
            { "value": "BE", "name": "Belgium" },
            { "value": "BO", "name": "Bolivia" },
            { "value": "BR", "name": "Brazil" },
            { "value": "BG", "name": "Bulgaria" },
            { "value": "CA", "name": "Canada" },
            { "value": "CL", "name": "Chile" },
            { "value": "CN", "name": "China" },
            { "value": "CO", "name": "Colombia" },
            { "value": "HR", "name": "Croatia" },
            { "value": "CZ", "name": "Czech Republic" },
            { "value": "DK", "name": "Denmark" },
            { "value": "EC", "name": "Ecuador" },
            { "value": "EG", "name": "Egypt" },
            { "value": "EE", "name": "Estonia" },
            { "value": "FI", "name": "Finland" },
            { "value": "FR", "name": "France" },
            { "value": "DE", "name": "Germany" },
            { "value": "GR", "name": "Greece" },
            { "value": "HK", "name": "Hong Kong" },
            { "value": "HU", "name": "Hungary" },
            { "value": "IS", "name": "Iceland" },
            { "value": "IN", "name": "India" },
            { "value": "ID", "name": "Indonesia" },
            { "value": "IE", "name": "Ireland" },
            { "value": "IL", "name": "Israel" },
            { "value": "IT", "name": "Italy" },
            { "value": "JP", "name": "Japan" },
            { "value": "JO", "name": "Jordan" },
            { "value": "KZ", "name": "Kazakhstan" },
            { "value": "KE", "name": "Kenya" },
            { "value": "KW", "name": "Kuwait" },
            { "value": "LV", "name": "Latvia" },
            { "value": "LB", "name": "Lebanon" },
            { "value": "LT", "name": "Lithuania" },
            { "value": "MY", "name": "Malaysia" },
            { "value": "MX", "name": "Mexico" },
            { "value": "MA", "name": "Morocco" },
            { "value": "NL", "name": "Netherlands" },
            { "value": "NZ", "name": "New Zealand" },
            { "value": "NG", "name": "Nigeria" },
            { "value": "NO", "name": "Norway" },
            { "value": "OM", "name": "Oman" },
            { "value": "PY", "name": "Paraguay" },
            { "value": "PE", "name": "Peru" },
            { "value": "PH", "name": "Philippines" },
            { "value": "PL", "name": "Poland" },
            { "value": "PT", "name": "Portugal" },
            { "value": "QA", "name": "Qatar" },
            { "value": "RO", "name": "Romania" },
            { "value": "RU", "name": "Russia" },
            { "value": "SA", "name": "Saudi Arabia" },
            { "value": "SG", "name": "Singapore" },
            { "value": "SK", "name": "Slovakia" },
            { "value": "SI", "name": "Slovenia" },
            { "value": "ZA", "name": "South Africa" },
            { "value": "KR", "name": "South Korea" },
            { "value": "ES", "name": "Spain" },
            { "value": "SE", "name": "Sweden" },
            { "value": "CH", "name": "Switzerland" },
            { "value": "TW", "name": "Taiwan" },
            { "value": "TH", "name": "Thailand" },
            { "value": "TN", "name": "Tunisia" },
            { "value": "TR", "name": "Turkey" },
            { "value": "UA", "name": "Ukraine" },
            { "value": "AE", "name": "United Arab Emirates" },
            { "value": "GB", "name": "United Kingdom" },
            { "value": "US", "name": "United States" },
            { "value": "UY", "name": "Uruguay" },
            { "value": "UZ", "name": "Uzbekistan" },
            { "value": "VE", "name": "Venezuela" },
            { "value": "VN", "name": "Vietnam" }
          ]
        }
      },
      "exclude": {
        "title": "Exclude Devices",
        "type": "object",
        "properties": {
          "type": {
            "title": "Exclude by Type",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "fan",
                "outlet",
                "switch",
                "bulb",
                "humidifier",
                "purifier"
              ]
            },
            "uniqueItems": true,
            "description": "Exclude devices by type"
          },
          "model": {
            "title": "Exclude by Model",
            "type": "array",
            "items": {
              "type": "string"
            },
            "uniqueItems": true,
            "description": "Exclude devices by model (e.g., 'Core300S', 'LV600S')"
          },
          "name": {
            "title": "Exclude by Name",
            "type": "array",
            "items": {
              "type": "string"
            },
            "uniqueItems": true,
            "description": "Exclude devices by exact name match"
          },
          "namePattern": {
            "title": "Exclude by Name Pattern",
            "type": "array",
            "items": {
              "type": "string"
            },
            "uniqueItems": true,
            "description": "Exclude devices by name pattern (regex)"
          },
          "id": {
            "title": "Exclude by ID",
            "type": "array",
            "items": {
              "type": "string"
            },
            "uniqueItems": true,
            "description": "Exclude devices by ID (cid/uuid)"
          }
        }
      },
      "retry": {
        "title": "Retry Configuration",
        "type": "object",
        "properties": {
          "maxRetries": {
            "title": "Maximum Retries",
            "type": "integer",
            "default": 3,
            "minimum": 1,
            "maximum": 10,
            "description": "Maximum number of retry attempts for failed operations"
          },
          "initialDelay": {
            "title": "Initial Delay",
            "type": "integer",
            "default": 2000,
            "minimum": 500,
            "maximum": 10000,
            "description": "Initial delay before first retry (in milliseconds)"
          },
          "maxDelay": {
            "title": "Maximum Delay",
            "type": "integer",
            "default": 10000,
            "minimum": 1000,
            "maximum": 60000,
            "description": "Maximum delay between retries (in milliseconds)"
          }
        }
      },
      "quotaManagement": {
        "title": "API Quota Management",
        "type": "object",
        "properties": {
          "enabled": {
            "title": "Enable Quota Management",
            "type": "boolean",
            "default": true,
            "description": "Enable API quota management to prevent exceeding VeSync's daily limits"
          },
          "bufferPercentage": {
            "title": "Buffer Percentage",
            "type": "integer",
            "default": 95,
            "minimum": 50,
            "maximum": 100,
            "description": "Percentage of the calculated quota to use (lower values provide more safety margin)"
          },
          "priorityMethods": {
            "title": "Priority Methods",
            "type": "array",
            "items": {
              "type": "string"
            },
            "default": [
              "turnOn", 
              "turnOff", 
              "setMode", 
              "setTargetHumidity", 
              "setBrightness",
              "setColorTemperature",
              "setColor",
              "changeFanSpeed",
              "setOscillation",
              "setChildLock"
            ],
            "uniqueItems": true,
            "description": "API methods that will be allowed even when quota is exceeded"
          }
        }
      }
    }
  }
}
