{
  "pluginAlias": "SonyProjector",
  "pluginType": "platform",
  "singular": true,
  "headerDisplay": "Control your Sony projector over IP using Sony's ADCP protocol. Exposes a HomeKit Television tile with inputs; picture/HDR controls are separate from input selection.",
  "schema": {
    "type": "object",
    "properties": {
      "name": {
        "title": "Accessory Name",
        "type": "string",
        "default": "Sony Projector",
        "required": false
      },
      "ip": {
        "title": "Projector IP Address",
        "type": "string",
        "format": "ipv4",
        "placeholder": "192.168.1.101",
        "required": true,
        "description": "Set a DHCP reservation for reliability."
      },
      "adcpPort": {
        "title": "ADCP Port",
        "type": "integer",
        "default": 53595,
        "placeholder": "53595",
        "required": false,
        "description": "TCP port for ADCP (default 53595)."
      },
      "useAuth": {
        "title": "Requires Authentication",
        "type": "boolean",
        "default": false,
        "required": false,
        "description": "Enable only if ADCP ▶︎ Requires Authentication is ON in the projector web UI."
      },
      "password": {
        "title": "ADCP Password",
        "type": "string",
        "required": false,
        "description": "Used to compute the SHA-256 response to the projector's nonce when ADCP authentication is enabled.",
        "condition": { "functionBody": "return model.useAuth === true;" }
      },
      "timeout": {
        "title": "Timeout (seconds)",
        "type": "integer",
        "default": 5,
        "minimum": 1,
        "maximum": 60,
        "required": false,
        "description": "How long to wait for projector replies before failing."
      },
      "inputs": {
        "title": "Input Sources",
        "type": "array",
        "description": "Define inputs to appear in the Home app. Each input must have a unique Identifier.",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "title": "Identifier",
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 1,
              "description": "Numeric ID used by HomeKit (1..50). Must be unique across inputs."
            },
            "name": {
              "title": "Display Name",
              "type": "string",
              "default": "HDMI 1"
            },
            "adcp": {
              "title": "ADCP Source Key",
              "type": "string",
              "default": "hdmi1",
              "oneOf": [
                { "title": "HDMI 1", "enum": ["hdmi1"] },
                { "title": "HDMI 2", "enum": ["hdmi2"] },
                { "title": "HDMI 3", "enum": ["hdmi3"] },
                { "title": "HDMI 4", "enum": ["hdmi4"] },
                { "title": "Custom (enter manually)", "enum": [""] }
              ],
              "description": "ADCP input token (e.g., hdmi1, hdmi2). If 'Custom', replace with the exact ADCP value supported by your model."
            }
          },
          "required": ["id", "name", "adcp"]
        },
        "default": [
          { "id": 1, "name": "HDMI 1", "adcp": "hdmi1" },
          { "id": 2, "name": "HDMI 2", "adcp": "hdmi2" }
        ]
      },
      "enableBlankScreen": {
        "title": "Enable Blank Screen Switch",
        "type": "boolean",
        "default": true,
        "required": false,
        "description": "Adds a switch to toggle video mute (blank screen)."
      },
      "enableBrightness": {
        "title": "Enable Brightness Slider",
        "type": "boolean",
        "default": true,
        "required": false,
        "description": "Adds a Lightbulb service with a Brightness slider (0–100)."
      },
      "enableContrast": {
        "title": "Enable Contrast Slider",
        "type": "boolean",
        "default": false,
        "required": false,
        "description": "Adds a Lightbulb service with a Contrast slider (0–100)."
      },
      "enablePictureModes": {
        "title": "Enable Picture Mode Switches",
        "type": "boolean",
        "default": false,
        "required": false,
        "description": "Adds exclusive switches for each picture mode (Cinema, Reference, Game, etc.)."
      },
      "enableHdrSelector": {
        "title": "Enable HDR Mode Selector",
        "type": "boolean",
        "default": true,
        "required": false,
        "description": "Adds HDR controls. In **UI Layout → Option 3 (Legacy Mixed List)** HDR modes appear in the TV Inputs list; otherwise they appear as separate switches."
      },
      "enableTestPatterns": {
        "title": "Enable Test Patterns (Advanced)",
        "type": "boolean",
        "default": false,
        "required": false,
        "description": "Expose test patterns as virtual inputs (e.g., Grid, Color Bars). Hidden by default."
      },
      "enableLampHoursSensor": {
        "title": "Enable Lamp/Laser Hours Sensor",
        "type": "boolean",
        "default": true,
        "required": false,
        "description": "Adds a read-only sensor that displays total hours (shown as lux value)."
      },
      "enableErrorSensor": {
        "title": "Enable Error Status Sensor",
        "type": "boolean",
        "default": false,
        "required": false,
        "description": "Adds a contact sensor that opens when the projector reports an error."
      },
      "pictureModes": {
        "title": "Picture Modes",
        "type": "array",
        "description": "Picture Mode options. Use string codes for VPL-XW5000 (e.g., 'reference', 'cinema_film_1').",
        "items": {
          "type": "object",
          "properties": {
            "name": { "title": "Display Name", "type": "string" },
            "code": {
              "title": "ADCP Code (string or number)",
              "type": "string"
            }
          },
          "required": ["name", "code"]
        },
        "default": [
          { "name": "Reference", "code": "reference" },
          { "name": "Cinema Film 1", "code": "cinema_film_1" },
          { "name": "Cinema Film 2", "code": "cinema_film_2" },
          { "name": "Game", "code": "game" },
          { "name": "IMAX", "code": "imax" }
        ]
      },
      "hdrModes": {
        "title": "HDR Modes",
        "type": "array",
        "description": "HDR Mode options. Use string codes for VPL-XW5000 (e.g., 'auto', 'off', 'hdr10', 'hlg').",
        "items": {
          "type": "object",
          "properties": {
            "name": { "title": "Display Name", "type": "string" },
            "code": { "title": "ADCP Code (string)", "type": "string" }
          },
          "required": ["name", "code"]
        },
        "default": [
          { "name": "HDR Auto", "code": "auto" },
          { "name": "HDR10", "code": "hdr10" },
          { "name": "HLG", "code": "hlg" },
          { "name": "HDR Off", "code": "off" }
        ]
      },
      "testPatterns": {
        "title": "Test Patterns (Advanced)",
        "type": "array",
        "description": "Test pattern options. Use string codes for VPL-XW5000.",
        "items": {
          "type": "object",
          "properties": {
            "name": { "title": "Pattern Name", "type": "string" },
            "code": { "title": "ADCP Code (string)", "type": "string" }
          },
          "required": ["name", "code"]
        },
        "default": [
          { "name": "Off", "code": "off" },
          { "name": "Grid", "code": "grid" },
          { "name": "Color Bars", "code": "color_bars" }
        ]
      },
      "staticModel": {
        "title": "Static Model (optional)",
        "type": "string",
        "required": false,
        "description": "If set, this value is used for the Model characteristic instead of querying the projector at startup."
      },
      "staticSerial": {
        "title": "Static Serial (optional)",
        "type": "string",
        "required": false,
        "description": "If set, this value is used for the Serial Number characteristic instead of querying the projector at startup."
      },
      "logging": {
        "title": "Logging Level",
        "type": "string",
        "default": "standard",
        "oneOf": [
          { "title": "None", "enum": ["none"] },
          { "title": "Standard", "enum": ["standard"] },
          { "title": "Debug", "enum": ["debug"] }
        ],
        "required": false,
        "description": "Controls verbosity of plugin logs."
      },
      "enablePolling": {
        "title": "Enable State Polling",
        "type": "boolean",
        "default": true,
        "required": false,
        "description": "Periodically polls projector state (power, brightness, identifiers) to keep HomeKit in sync."
      },
      "pollingInterval": {
        "title": "Polling Interval (seconds)",
        "type": "integer",
        "default": 30,
        "minimum": 10,
        "maximum": 300,
        "required": false,
        "description": "How often to poll when enabled. Increase to reduce network traffic."
      }
    },
    "required": ["ip"]
  },
  "layout": [
    {
      "type": "fieldset",
      "title": "Connection",
      "items": ["name", "ip", "adcpPort", "useAuth", "password", "timeout"]
    },
    {
      "type": "fieldset",
      "title": "Inputs",
      "items": ["inputs"]
    },
    {
      "type": "fieldset",
      "title": "Device Info (optional)",
      "items": ["staticModel", "staticSerial"]
    },
    {
      "type": "fieldset",
      "title": "Picture Controls",
      "items": [
        "enableBlankScreen",
        "enableBrightness",
        "enableContrast",
        "enablePictureModes",
        "pictureModes",
        "enableHdrSelector",
        "hdrModes"
      ]
    },
    {
      "type": "fieldset",
      "title": "Sensors & Diagnostics",
      "items": [
        "enableLampHoursSensor",
        "enableErrorSensor",
        "enableTestPatterns",
        "testPatterns"
      ]
    },
    {
      "type": "fieldset",
      "title": "Advanced",
      "items": ["logging", "enablePolling", "pollingInterval"]
    }
  ]
}
