/**
 * 客户端 API 路径（均以 `/` 开头）。
 * 与 `VITE_API_BASE_URL`、Vite 代理拼接后请求后端。
 *
 * 与本地 Swagger（`http://localhost:3000/docs` → `swagger-ui-init.js` 内嵌 `swaggerDoc`）对照：
 * 已对齐 sms/send、sms/login、auth/refresh、chat/completions/stream；
 * 另有 `chat/sessions`、`chat/sessions/{sessionId}/messages`（见 `chatSessions` 与 `chatSessionMessagesPath`）。
 * `auth/logout` 为前端预留，当前嵌入的 OpenAPI 片段中未出现。
 */

export const ApiPath = {
  /** 发送短信验证码。POST body: `{ phone, scene }` */
  authSmsSend: "/api/client/v1/auth/sms/send",
  /** 短信验证码登录。POST body: `{ phone, code }` */
  authSmsLogin: "/api/client/v1/auth/sms/login",
  /**
   * 刷新访问令牌。POST body: `{ refreshToken }`
   * 注意：此接口不应携带 `Authorization: Bearer`（见 `http.ts` 拦截器白名单）。
   */
  authRefresh: "/api/client/v1/auth/refresh",
  /**
   * 登出（可选，若后端未实现会失败但本地仍会清理会话）。
   * POST body: `{ refreshToken }`；与 refresh 一样不携带 `Authorization`（见 `http.ts` 白名单）。
   */
  authLogout: "/api/client/v1/auth/logout",
  /** 聊天补全（SSE 流式）。POST body: `{ messages, model? }` */
  chatCompletionsStream: "/api/client/v1/chat/completions/stream",
  /** 会话列表/创建（Swagger 已声明，业务接入后调用） */
  chatSessions: "/api/client/v1/chat/sessions",
} as const;

/** 某会话下的消息列表路径（Swagger：`/api/client/v1/chat/sessions/{sessionId}/messages`） */
export function chatSessionMessagesPath(sessionId: string): string {
  return `/api/client/v1/chat/sessions/${encodeURIComponent(sessionId)}/messages`;
}

/** 单个会话资源路径（Swagger：`/api/client/v1/chat/sessions/{sessionId}`） */
export function chatSessionPath(sessionId: string): string {
  return `/api/client/v1/chat/sessions/${encodeURIComponent(sessionId)}`;
}

/** 会话标题更新路径（Swagger：`/api/client/v1/chat/sessions/{sessionId}/title`） */
export function chatSessionTitlePath(sessionId: string): string {
  return `/api/client/v1/chat/sessions/${encodeURIComponent(sessionId)}/title`;
}

/** 请求拦截器跳过附加 Bearer 的路径（与 `ApiPath` 保持一致） */
export const pathsWithoutBearerAuth: readonly string[] = [ApiPath.authRefresh, ApiPath.authLogout];
