{
  "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)"
      },
      "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"
          }
        }
      }
    }
  }
}
