/**
 * HostBridge 能力枚举 —— 与 packages/agent-protocol/src/host-bridge.ts 的 HostCapability 1:1 对齐。
 *
 * 复制而非 import 原因：见 ../providers/provider.types.ts 顶注（NestJS + ts-node-dev 解析边界问题，
 * PR15.5 抽 monorepo workspace 时统一切回直接 import @ffai/agent-protocol）。
 *
 * 新增 capability 时：同步改 packages/agent-protocol/src/host-bridge.ts 的 HostCapability union，
 * 否则前后端契约漂移。
 */

export type HostCapability =
  | 'fs.read'
  | 'fs.write'
  | 'fs.list'
  | 'clipboard.read'
  | 'clipboard.write'
  | 'notify'
  | 'shell.exec'
  | 'shell.openExternal';

/**
 * 各 surface 的默认能力集 —— **三处镜像之一**，desktop 一项跟
 * `packages/agent-protocol/src/host-bridge.ts` 的 `DESKTOP_ELECTRON_CAPABILITIES` +
 * `desktop/src/main.ts` 的同名局部常量必须字节级一致；新增 capability 同步三处。
 *
 * 真实生产 capabilities 还要 ∩ OrganizationAgentSettings.disabledCapabilities；
 * 那一步在 ListToolsContext 构造点（controller / messages.service）做，不在这里。
 */
export const SURFACE_DEFAULT_CAPABILITIES: Record<string, readonly HostCapability[]> = {
  web: ['shell.openExternal'],
  desktop: [
    'fs.read',
    'fs.write',
    'fs.list',
    'clipboard.read',
    'clipboard.write',
    'notify',
    'shell.exec',
    'shell.openExternal',
  ],
  // mobile / teams / cli 待 Phase 2 / 3 后续 PR 落
  mobile: [],
  teams: [],
  cli: ['shell.exec', 'shell.openExternal'],
};

export function defaultCapabilitiesForSurface(
  surface: 'web' | 'desktop' | 'mobile' | 'teams' | 'cli' | undefined,
): readonly HostCapability[] {
  if (!surface) return SURFACE_DEFAULT_CAPABILITIES.web;
  return SURFACE_DEFAULT_CAPABILITIES[surface] ?? [];
}
