{
  "pluginAlias": "GiraHomeserver",
  "pluginType": "platform",
  "singular": true,
  "schema": {
    "type": "object",
    "properties": {
      "name": {
        "title": "Name",
        "type": "string",
        "default": "Gira Homeserver",
        "required": true,
        "description": "Name of the platform as it appears in HomeKit"
      },
      "host": {
        "title": "Homeserver IP Address",
        "type": "string",
        "required": true,
        "format": "hostname",
        "description": "IP address or hostname of the Gira Homeserver 4"
      },
      "port": {
        "title": "Port",
        "type": "integer",
        "default": 80,
        "minimum": 1,
        "maximum": 65535,
        "description": "Port number for the Gira Homeserver (default: 80)"
      },
      "username": {
        "title": "Username",
        "type": "string",
        "required": true,
        "description": "Username for Gira Homeserver authentication"
      },
      "password": {
        "title": "Password",
        "type": "string",
        "required": true,
        "description": "Password for Gira Homeserver authentication"
      },
      "pollingInterval": {
        "title": "Polling Interval (ms)",
        "type": "integer",
        "default": 30000,
        "minimum": 5000,
        "maximum": 300000,
        "description": "Interval in milliseconds for polling device states (default: 30000)"
      },
      "debugMode": {
        "title": "Debug Mode",
        "type": "boolean",
        "default": false,
        "description": "Enable debug logging for troubleshooting"
      },
      "adminMode": {
        "title": "Admin Mode",
        "type": "boolean",
        "default": false,
        "description": "Use admin client registration for potentially broader access"
      },
      "forceCompleteAccess": {
        "title": "Force Complete Access",
        "type": "boolean",
        "default": false,
        "description": "Try multiple registration strategies to access all devices (experimental)"
      },
      "alternativeClientId": {
        "title": "Alternative Client ID",
        "type": "string",
        "description": "Custom client identifier for API registration (advanced users only)"
      },
      "buildingStructure": {
        "title": "Building Structure Settings",
        "type": "object",
        "properties": {
          "useLocationHierarchy": {
            "title": "Use Location Hierarchy",
            "type": "boolean",
            "default": false,
            "description": "Include room names in device names for better organization"
          },
          "groupByFloor": {
            "title": "Group by Floor",
            "type": "boolean",
            "default": false,
            "description": "Include floor information in device names"
          },
          "groupByBuilding": {
            "title": "Group by Building",
            "type": "boolean",
            "default": false,
            "description": "Include building information in device names"
          },
          "customRoomMappings": {
            "title": "Custom Room Name Mappings",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Map original room names to custom names (JSON object)"
          }
        }
      },
      "deviceFilters": {
        "title": "Device Filters",
        "type": "object",
        "properties": {
          "includeRooms": {
            "title": "Include Rooms",
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Only include devices from these rooms (leave empty to include all)"
          },
          "excludeRooms": {
            "title": "Exclude Rooms",
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Exclude devices from these rooms"
          },
          "includeTypes": {
            "title": "Include Device Types",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "switching", "dimming", "colored_light", "tunable_white", 
                "blinds", "trigger", "press_and_hold", "scene", 
                "heating", "cooling", "fan_coil", "sauna", 
                "audio", "sonos", "camera", "link",
                "binary_status", "unsigned_status", "signed_status", "float_status", "text_status",
                "unsigned_value", "signed_value", "percent_value", "temperature_value", "decimal_value",
                "temperature", "humidity", "sensor", "weather", "energy"
              ]
            },
            "description": "Only include these device types (leave empty to include all supported types)"
          },
          "excludeTypes": {
            "title": "Exclude Device Types",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "switching", "dimming", "colored_light", "tunable_white", 
                "blinds", "trigger", "press_and_hold", "scene", 
                "heating", "cooling", "fan_coil", "sauna", 
                "audio", "sonos", "camera", "link",
                "binary_status", "unsigned_status", "signed_status", "float_status", "text_status",
                "unsigned_value", "signed_value", "percent_value", "temperature_value", "decimal_value",
                "temperature", "humidity", "sensor", "weather", "energy"
              ]
            },
            "description": "Exclude these device types"
          },
          "includeTrades": {
            "title": "Include Trades",
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Only include devices from these trades/functions (leave empty to include all)"
          },
          "excludeTrades": {
            "title": "Exclude Trades", 
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Exclude devices from these trades/functions"
          }
        }
      },
      "advanced": {
        "title": "Advanced API Settings",
        "type": "object",
        "properties": {
          "requestTimeout": {
            "title": "Request Timeout (ms)",
            "type": "integer",
            "default": 30000,
            "minimum": 5000,
            "maximum": 120000,
            "description": "Timeout for HTTP requests to the Gira API"
          },
          "maxRetries": {
            "title": "Maximum Retries",
            "type": "integer",
            "default": 3,
            "minimum": 0,
            "maximum": 10,
            "description": "Maximum number of retry attempts for failed API requests"
          },
          "enableDetailedLogging": {
            "title": "Enable Detailed API Logging",
            "type": "boolean",
            "default": false,
            "description": "Log detailed API request/response information (for debugging)"
          }
        }
      }
    }
  },
  "layout": [
    {
      "type": "fieldset", 
      "title": "Connection Settings",
      "expandable": false,
      "items": [
        "name",
        "host", 
        "port",
        "username",
        "password"
      ]
    },
    {
      "type": "fieldset",
      "title": "General Settings", 
      "expandable": true,
      "items": [
        "pollingInterval",
        "debugMode"
      ]
    },
    {
      "type": "fieldset",
      "title": "Device Access Control",
      "expandable": true,
      "items": [
        {
          "type": "help",
          "helpvalue": "<h5>Use these options if you're only seeing alarm devices instead of all your lights, blinds, etc.</h5>"
        },
        "adminMode",
        "forceCompleteAccess", 
        "alternativeClientId"
      ]
    },
    {
      "type": "fieldset",
      "title": "Building Structure",
      "expandable": true,
      "items": [
        "buildingStructure.useLocationHierarchy",
        "buildingStructure.groupByFloor",
        "buildingStructure.groupByBuilding",
        "buildingStructure.customRoomMappings"
      ]
    },
    {
      "type": "fieldset",
      "title": "Device Filters",
      "expandable": true,
      "items": [
        "deviceFilters.includeRooms",
        "deviceFilters.excludeRooms",
        "deviceFilters.includeTypes", 
        "deviceFilters.excludeTypes",
        "deviceFilters.includeTrades",
        "deviceFilters.excludeTrades"
      ]
    },
    {
      "type": "fieldset",
      "title": "Advanced API Settings",
      "expandable": true,
      "items": [
        "advanced.requestTimeout",
        "advanced.maxRetries", 
        "advanced.enableDetailedLogging"
      ]
    }
  ]
}