{
  "$schema": "./servers.schema.json",
  "version": "1.0",
  "description": "Server configuration for COPILOT keyboard system",

  "servers": [
    {
      "id": "geviscope-01",
      "name": "GeViScope Server 1",
      "type": "geviscope",
      "enabled": true,
      "connection": {
        "address": "192.168.1.10",
        "port": 7700,
        "username": "operator",
        "password": "${GEVISCOPE_01_PASSWORD}"
      },
      "bridge": {
        "url": "http://localhost:7720",
        "websocket": "ws://localhost:7720/ws/events"
      },
      "resources": {
        "cameraRange": { "start": 1, "end": 100 },
        "monitorRange": { "start": 1, "end": 16 }
      },
      "features": {
        "ptz": true,
        "playback": true,
        "alarms": true,
        "digitalIO": true
      }
    },
    {
      "id": "gcore-01",
      "name": "G-Core Server 1",
      "type": "gcore",
      "enabled": true,
      "connection": {
        "address": "192.168.1.20",
        "port": 7700,
        "username": "operator",
        "password": "${GCORE_01_PASSWORD}"
      },
      "bridge": {
        "url": "http://localhost:7721",
        "websocket": "ws://localhost:7721/ws/events"
      },
      "resources": {
        "cameraRange": { "start": 101, "end": 200 },
        "monitorRange": { "start": 17, "end": 32 }
      },
      "features": {
        "ptz": true,
        "playback": true,
        "alarms": true,
        "digitalIO": true
      }
    },
    {
      "id": "geviserver-01",
      "name": "GeViServer (PTZ Fallback)",
      "type": "geviserver",
      "enabled": false,
      "connection": {
        "address": "192.168.1.5",
        "port": 7700,
        "username": "operator",
        "password": "${GEVISERVER_01_PASSWORD}"
      },
      "bridge": {
        "url": "http://localhost:7710"
      },
      "resources": {
        "cameraRange": { "start": 1, "end": 200 },
        "monitorRange": { "start": 1, "end": 32 }
      },
      "features": {
        "ptz": true,
        "playback": false,
        "alarms": false,
        "digitalIO": false
      }
    }
  ],

  "routing": {
    "description": "Rules for routing commands to correct server based on camera/monitor ID",
    "cameraToServer": [
      { "range": [1, 100], "serverId": "geviscope-01" },
      { "range": [101, 200], "serverId": "gcore-01" }
    ],
    "monitorToServer": [
      { "range": [1, 16], "serverId": "geviscope-01" },
      { "range": [17, 32], "serverId": "gcore-01" }
    ]
  },

  "healthCheck": {
    "enabled": true,
    "intervalMs": 30000,
    "timeoutMs": 5000,
    "unhealthyThreshold": 3
  }
}
