{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      "Yarp": "Information"
    }
  },
  "AllowedHosts": "*",
  "Cors": {
    "Origins": [
      "http://localhost:5173",
      "http://127.0.0.1:5173"
    ]
  },
  "Jwt": {
    "Secret": "REPLACE_ME",
    "Issuer": "migu.server",
    "Audience": "migu.client",
    "LifetimeMinutes": 1440
  },
  "Internal": {
    "Token": "REPLACE_ME"
  },
  "_comment_Simple3": "登录后拉起调度内核 Simple3.exe；改路径请编辑下方 Simple3 节点。诊断: http://localhost:8080/api/health/simple3",
  "Simple3": {
    "Enabled": true,
    "ExecutablePath": "D:\\MDCS\\Release\\Simple\\Simple3\\Simple3.exe",
    "WorkingDirectory": "D:\\MDCS\\Release\\Simple\\Simple3",
    "Arguments": "",
    "ReadinessTimeoutMs": 15000,
    "ReadinessPollIntervalMs": 250,
    "ProjectionPort": 8222,
    "FollowParent": false
  },
  "Auth": {
    "Users": {
      "admin": { "Password": "admin" },
      "ops":   { "Password": "ops" }
    }
  },
  "_comment_Ops": "运维操作真实下发映射（M4）。opCode → 'kind:Method'，Method 必须是 Simple3 反射 [MethodMember] 的真实方法名（车辆 kind=car，见 Car.cs：OnlineCar/OfflineCar/DisableCar/EnableCar/Repair/Blown/Reset 等；任务 kind=mission）。运营白名单的 pause/resume/gohome/manualCharge 内核暂无一一对应方法——留空则仅记审计并向前端如实返回『未下发』，按现场内核能力填写后即真实生效。示例： 'ops.car.gohome': 'car:Reset'",
  "Ops": {
    "Dispatch": {
    }
  },
  "_comment_Ota": "车辆 OTA：包与任务落盘 DataRoot；WatchDog:9776。拉包时车会 POST 到 WatchDog 配置的 serverIP:ReceivePort/upload-mdcs/*（默认 8000，与旧 Electron OTA 一致）。请把各车 watch_dog.json 的 serverIP 设为本机局域网 IP。",
  "Ota": {
    "DataRoot": "data/ota",
    "WatchDogPort": 9776,
    "ReceivePort": 8000,
    "RequestTimeoutMs": 60000,
    "UploadTimeoutMs": 600000,
    "PublicBaseUrl": ""
  },
  "_comment_ReverseProxy": "sl-route 兜底 AnyAuthed（投影只读 + SSE）。管理面路径（map-edit / ai-config / reflection 写操作）单独拆路由挂 PlatformScope，防止运营账号经反代直达地图编辑与任意反射调用。",
  "ReverseProxy": {
    "Routes": {
      "sl-mapedit-route": {
        "ClusterId": "sl-cluster",
        "AuthorizationPolicy": "PlatformScope",
        "Order": -2,
        "Match": { "Path": "/api/sl/projection/map-edit/{**catch-all}" },
        "Transforms": [
          { "PathRemovePrefix": "/api/sl" }
        ]
      },
      "sl-aiconfig-route": {
        "ClusterId": "sl-cluster",
        "AuthorizationPolicy": "PlatformScope",
        "Order": -2,
        "Match": { "Path": "/api/sl/projection/ai-config/{**catch-all}" },
        "Transforms": [
          { "PathRemovePrefix": "/api/sl" }
        ]
      },
      "sl-assistant-route": {
        "ClusterId": "sl-cluster",
        "AuthorizationPolicy": "PlatformScope",
        "Order": -2,
        "Match": { "Path": "/api/sl/projection/assistant/{**catch-all}" },
        "Transforms": [
          { "PathRemovePrefix": "/api/sl" }
        ]
      },
      "sl-reflection-selection-route": {
        "ClusterId": "sl-cluster",
        "AuthorizationPolicy": "AnyAuthed",
        "Order": -3,
        "Match": { "Path": "/api/sl/projection/reflection/selection/{**catch-all}" },
        "Transforms": [
          { "PathRemovePrefix": "/api/sl" }
        ]
      },
      "sl-reflection-write-route": {
        "ClusterId": "sl-cluster",
        "AuthorizationPolicy": "PlatformScope",
        "Order": -1,
        "Match": {
          "Path": "/api/sl/projection/reflection/{**catch-all}",
          "Methods": [ "POST", "PUT", "PATCH", "DELETE" ]
        },
        "Transforms": [
          { "PathRemovePrefix": "/api/sl" }
        ]
      },
      "sl-route": {
        "ClusterId": "sl-cluster",
        "AuthorizationPolicy": "AnyAuthed",
        "Match": { "Path": "/api/sl/{**catch-all}" },
        "Transforms": [
          { "PathRemovePrefix": "/api/sl" }
        ]
      },
      "vrender-route": {
        "ClusterId": "vrender-cluster",
        "Match": { "Path": "/vr/{**catch-all}" },
        "Transforms": [
          { "PathRemovePrefix": "/vr" }
        ]
      }
    },
    "Clusters": {
      "sl-cluster": {
        "Destinations": {
          "sl1": { "Address": "http://127.0.0.1:8222/" }
        }
      },
      "vrender-cluster": {
        "Destinations": {
          "vr1": { "Address": "http://127.0.0.1:8223/" }
        }
      }
    }
  },
  "Database": {
    "Provider": "sqlite",
    "SchemaMode": "Migrate",
    "ApplyDataMigratorsOnStartup": true
  },
  "ConnectionStrings": {
    "Platform": "Data Source=data/platform.db"
  }
}
