/**
 * miniapp 运行时配置(host/device_id/token 占位,由用户在设置页或 build env 填)
 *
 * 这些值在真实部署前是占位:
 * - RELAY_HOST:ws/wss 地址,需替换为实际部署的 df-relay 地址
 * - DEVICE_ID:用户首次配置桌面端时生成的设备 ID
 * - TOKEN:对齐 df-relay 的 DF_RELAY_TOKEN(生产建议每 device 独立 token)
 */

export interface MiniappConfig {
  /** relay WS 地址(含协议),如 'ws://192.168.1.100:8080/ws/miniapp' 或 'wss://relay.example.com/ws/miniapp' */
  relayHost: string
  /** 配对绑定的设备 ID */
  deviceId: string
  /** 配对 token(对齐 df-relay DF_RELAY_TOKEN) */
  token: string
  /** 心跳间隔(ms) */
  heartbeatInterval: number
  /** 重连初始间隔(ms,指数退避) */
  reconnectBaseDelay: number
  /** 重连最大间隔(ms) */
  reconnectMaxDelay: number
}

/**
 * 默认配置(占位值,需替换)
 *
 * 真实部署:用户在设置页填 relayHost/deviceId/token,或通过 build-time env 注入。
 * MVP 阶段留占位让类型自洽,实际连接会失败(token 校验不通过 → relay 关连接,
 * 这符合预期,提示用户配置)。
 */
export const defaultConfig: MiniappConfig = {
  // 测试服 wss(u-work.1216.top → nginx 终止 TLS → df-relay :9180 明文 ws)
  // 微信小程序真机要求 wss + socket 合法域名白名单(微信公众平台→开发设置→服务器域名)
  relayHost: 'wss://u-work.1216.top/ws/miniapp',
  // 配对桌面端 device_id(查桌面端 KV app_settings:device_id;填错则握手过但路由无对端)
  // 当前填本机桌面端 device_id(联调期硬编码,后续做配对绑定流程)
  deviceId: '1b92cbbd-d03e-4a0c-b226-9fadf8dcf0f0',
  token: 'devflow-relay-default-token',
  heartbeatInterval: 30000,
  reconnectBaseDelay: 1000,
  reconnectMaxDelay: 30000,
}

/** 单例配置(miniapp 内存配置,后续接 storage 持久化) */
let _config: MiniappConfig = { ...defaultConfig }

export function getConfig(): MiniappConfig {
  return _config
}

export function setConfig(patch: Partial<MiniappConfig>): void {
  _config = { ..._config, ...patch }
}
