// API 响应类型定义

// 通用 API 响应结构
export interface ApiResponse<T = unknown> {
  request_id: string;
  code: number;
  message: string;
  data: T | null;
}

// 登录/注册成功响应数据
export interface AuthData {
  token: string;
  expires_at: number;
}

// 用户信息（从 token 解析或 API 返回）
export interface UserInfo {
  user_id: number;
  email: string;
  exp: number;
  iat: number;
  // 兼容字段，方便代码使用
  id: string;
}

// 登录请求参数
export interface LoginRequest {
  email: string;
  password: string;
}

// 注册请求参数
export interface RegisterRequest {
  email: string;
  password: string;
}

// OSS 签名响应数据
export interface OssSignatureData {
  path: string;
  repeat: boolean;
  sign_url: string;
}

// OSS 签名请求参数
export interface OssSignatureRequest {
  file_hash: string;
  file_name: string;
}

// 创建识别任务请求参数
export interface RecognitionTaskRequest {
  file_url: string;
  file_hash: string;
  file_name: string;
  task_type: 'FORMULA'; // 目前只支持公式识别
}

// 识别任务基础响应数据
export interface RecognitionTaskData {
  task_no: string;
  status: number;
}

// 识别任务状态枚举
export enum TaskStatus {
  Pending = 0,
  Processing = 1,
  Completed = 2,
  Failed = 3,
}

// 识别任务详细结果
export interface RecognitionResultData {
  task_no: string;
  status: TaskStatus;
  count: number;
  latex: string;
  markdown: string;
  mathml: string;
  mml: string; // MathML with mml: prefix
  image_blob: string; // Base64 or URL? assuming string content
  docx_url: string;
  pdf_url: string;
}

// 任务历史记录项
export interface TaskHistoryItem {
  task_id: string;
  file_name: string;
  status: TaskStatus; // 0=Pending, 1=Processing, 2=Completed, 3=Failed
  origin_url: string; // 已签名的 OSS URL，可直接用于预览
  task_type: 'FORMULA';
  created_at: string;
  latex: string;
  markdown: string;
  mathml: string;
  mml: string;
  image_blob: string;
  docx_url: string;
  pdf_url: string;
}

// 任务历史记录列表响应
export interface TaskListData {
  task_list: TaskHistoryItem[];
  total: number;
}

// API 错误码定义
export enum ApiErrorCode {
  // 通用错误码
  SUCCESS = 200,
  PARAM_ERROR = 400,
  UNAUTHORIZED = 401,
  FORBIDDEN = 403,
  NOT_FOUND = 404,
  INVALID_STATUS = 405,
  DB_ERROR = 500,
  SYSTEM_ERROR = 501,
  // 业务错误码
  TASK_NOT_COMPLETE = 1001,
  RECORD_REPEAT = 1002,
  SMS_CODE_ERROR = 1003,
  EMAIL_EXISTS = 1004,
  EMAIL_NOT_FOUND = 1005,
  PASSWORD_MISMATCH = 1006,
}

// API 错误码消息映射（中文）
export const ApiErrorMessages: Record<number, string> = {
  // 通用错误码
  [ApiErrorCode.SUCCESS]: '操作成功',
  [ApiErrorCode.PARAM_ERROR]: '参数错误',
  [ApiErrorCode.UNAUTHORIZED]: '未授权，请先登录',
  [ApiErrorCode.FORBIDDEN]: '无权限访问',
  [ApiErrorCode.NOT_FOUND]: '资源不存在',
  [ApiErrorCode.INVALID_STATUS]: '状态无效',
  [ApiErrorCode.DB_ERROR]: '服务器错误，请稍后重试',
  [ApiErrorCode.SYSTEM_ERROR]: '系统错误，请稍后重试',
  // 业务错误码
  [ApiErrorCode.TASK_NOT_COMPLETE]: '任务未完成',
  [ApiErrorCode.RECORD_REPEAT]: '记录重复',
  [ApiErrorCode.SMS_CODE_ERROR]: '验证码错误',
  [ApiErrorCode.EMAIL_EXISTS]: '该邮箱已注册',
  [ApiErrorCode.EMAIL_NOT_FOUND]: '该邮箱未注册',
  [ApiErrorCode.PASSWORD_MISMATCH]: '密码错误',
};
