{
  "pluginAlias": "UnifiOccupancyLite",
  "pluginType": "platform",
  "singular": true,
  "schema": {
    "type": "object",
    "properties": {
      "name": {
        "title": "Plugin Name",
        "type": "string",
        "default": "UniFi Occupancy Lite",
        "required": true
      },
      "unifi": {
        "type": "object",
        "properties": {
          "controller": {
            "title": "Controller URL",
            "type": "string",
            "required": true,
            "description": "UniFi Controller URL (e.g., https://192.168.1.1 or https://unifi.local)"
          },
          "apiKey": {
            "title": "API Key",
            "type": "string",
            "required": true,
            "description": "Local user API key from UniFi Controller"
          },
          "site": {
            "title": "Site ID",
            "type": "string",
            "default": "default",
            "description": "UniFi site ID (usually 'default')"
          },
          "secure": {
            "title": "Verify SSL Certificate",
            "type": "boolean",
            "default": false,
            "description": "Enable SSL certificate verification"
          },
          "useSiteManagerApi": {
            "title": "Use UniFi Site Manager API",
            "type": "boolean",
            "default": false,
            "description": "Use cloud-based Site Manager API instead of local controller"
          },
          "hostId": {
            "title": "Host ID",
            "type": "string",
            "condition": {
              "functionBody": "return model.unifi && model.unifi.useSiteManagerApi === true;"
            },
            "description": "Required when using Site Manager API"
          }
        },
        "required": ["controller", "apiKey"]
      },
      "interval": {
        "title": "Refresh Interval (seconds)",
        "type": "integer",
        "default": 180,
        "minimum": 30,
        "maximum": 3600,
        "description": "How often to check for device presence"
      },
      "globalPresenceSensor": {
        "title": "Global Presence Sensor",
        "type": "boolean",
        "default": true,
        "description": "Create a sensor that shows if anyone is home"
      },
      "residents": {
        "title": "Residents",
        "type": "array",
        "minItems": 1,
        "items": {
          "type": "object",
          "properties": {
            "name": {
              "title": "Name",
              "type": "string",
              "required": true,
              "minLength": 1,
              "description": "Resident name (will appear in HomeKit)"
            },
            "devices": {
              "title": "Devices",
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "title": "Device Name",
                    "type": "string",
                    "required": true,
                    "minLength": 1
                  },
                  "mac": {
                    "title": "MAC Address",
                    "type": "string",
                    "pattern": "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$",
                    "description": "Device MAC address (format: AA:BB:CC:DD:EE:FF) - preferred method"
                  },
                  "ip": {
                    "title": "IP Address",
                    "type": "string",
                    "format": "ipv4",
                    "description": "Device IP address (alternative to MAC, less reliable)"
                  },
                  "hostname": {
                    "title": "Hostname",
                    "type": "string",
                    "minLength": 1,
                    "description": "Device hostname (alternative to MAC/IP)"
                  },
                  "minTrafficAmount": {
                    "title": "Minimum Traffic (KB)",
                    "type": "integer",
                    "minimum": 0,
                    "description": "Minimum traffic in last 15 minutes to consider device active (0 = any activity)"
                  }
                },
                "required": ["name"],
                "not": {
                  "allOf": [
                    {"not": {"required": ["mac"]}},
                    {"not": {"required": ["ip"]}},
                    {"not": {"required": ["hostname"]}}
                  ]
                },
                "errorMessage": {
                  "not": "Device must have at least one identifier: MAC address, IP address, or hostname"
                }
              }
            }
          },
          "required": ["name", "devices"]
        }
      },
      "wifiPoints": {
        "title": "WiFi Points",
        "type": "array",
        "description": "Create presence sensors for specific WiFi access points/rooms",
        "items": {
          "type": "object", 
          "properties": {
            "name": {
              "title": "Name",
              "type": "string",
              "required": true,
              "minLength": 1,
              "description": "WiFi point name (will appear in HomeKit)"
            },
            "mac": {
              "title": "Access Point MAC Address",
              "type": "string",
              "pattern": "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$",
              "description": "MAC address of the access point"
            },
            "ip": {
              "title": "Access Point IP Address", 
              "type": "string",
              "format": "ipv4",
              "description": "IP address of the access point (alternative to MAC)"
            }
          },
          "required": ["name"],
          "not": {
            "allOf": [
              {"not": {"required": ["mac"]}},
              {"not": {"required": ["ip"]}}
            ]
          },
          "errorMessage": {
            "not": "WiFi point must have at least one identifier: MAC address or IP address"
          }
        }
      }
    },
    "required": ["name", "unifi"]
  },
  "layout": [
    {
      "type": "fieldset",
      "title": "UniFi Controller Settings",
      "items": [
        "unifi.controller",
        "unifi.apiKey", 
        "unifi.site",
        "unifi.secure"
      ]
    },
    {
      "type": "fieldset", 
      "title": "Site Manager API (Optional)",
      "description": "For cloud-hosted controllers only",
      "items": [
        "unifi.useSiteManagerApi",
        "unifi.hostId"
      ]
    },
    {
      "type": "fieldset",
      "title": "General Settings", 
      "items": [
        "interval",
        "globalPresenceSensor"
      ]
    },
    {
      "type": "fieldset",
      "title": "Residents",
      "description": "People whose devices to track for presence detection",
      "items": [
        {
          "key": "residents",
          "type": "array",
          "items": [
            "residents[].name",
            {
              "key": "residents[].devices",
              "type": "array", 
              "items": [
                "residents[].devices[].name",
                {
                  "type": "fieldset",
                  "title": "Device Identification (at least one required)",
                  "items": [
                    "residents[].devices[].mac",
                    "residents[].devices[].ip", 
                    "residents[].devices[].hostname"
                  ]
                },
                "residents[].devices[].minTrafficAmount"
              ]
            }
          ]
        }
      ]
    },
    {
      "type": "fieldset",
      "title": "WiFi Points (Optional)",
      "description": "Create room-specific presence sensors",
      "items": [
        {
          "key": "wifiPoints",
          "type": "array",
          "items": [
            "wifiPoints[].name",
            {
              "type": "fieldset",
              "title": "Access Point Identification (at least one required)",
              "items": [
                "wifiPoints[].mac",
                "wifiPoints[].ip"
              ]
            }
          ]
        }
      ]
    }
  ]
}
