import { requestClient } from '#/api/request';

/**
 * 文件上传
 * 通过后端服务器上传文件到OSS
 * 
 * @param data 上传数据，包含file字段（文件对象）
 * @returns Promise 返回上传结果，包含url字段（文件URL）
 */
export async function uploadFile(data: any) {
  return requestClient.upload('upload/image', data);
}

/**
 * 文件上传 - 聊天信息
 * 用于聊天场景的文件上传
 * 
 * @param data 上传数据，包含file字段（文件对象）
 * @returns Promise 返回上传结果，包含url字段（文件URL）
 */
export async function uploadChatFile(data: any) {
  return requestClient.upload('upload/chat-file', data);
}

/**
 * 获取OSS上传签名信息
 * 
 * 该接口用于获取OSS直传所需的签名信息，包括：
 * - accessKeyId: 阿里云访问密钥ID
 * - policy: Base64编码的上传策略
 * - signature: 签名值
 * - host: OSS服务端点URL
 * - bucket: 存储桶名称（从后端环境变量获取，返回给前端）
 * - key: 文件路径前缀
 * - expire: 签名过期时间戳
 * 
 * 使用场景：
 * - 前端需要直接上传文件到OSS时，先调用此接口获取签名
 * - 签名具有时效性，需要在有效期内使用
 * - 每次上传前建议重新获取签名，确保签名未过期
 * 
 * 错误处理：
 * - 如果后端返回错误，会通过requestClient的统一错误处理机制处理
 * - 调用方需要捕获异常并进行相应处理
 * 
 * @returns Promise<OssSignature> 返回OSS签名信息对象
 * @throws 如果API调用失败，会抛出错误
 * 
 * @example
 * try {
 *   const signature = await getOssSignature();
 *   console.log('获取签名成功', signature);
 * } catch (error) {
 *   console.error('获取签名失败', error);
 * }
 */
export async function getOssSignature() {
  return requestClient.get('/upload/oss-signature');
}

/**
 * OSS 直传成功后登记 xk_file
 */
export async function registerOssFile(data: {
  url: string;
  type?: number;
  source?: number;
  file_size?: number;
  file_name?: string;
}) {
  return requestClient.post('/upload/register-oss-file', data);
}

/**
 * 通过文件id集合获取文件信息
 * 
 * @param data 请求数据，包含fileInfoIds字段（文件ID数组或逗号分隔的字符串）
 * @returns Promise 返回文件信息数组
 */
export async function getFileInfoByIds(data: any) {
  return requestClient.post('/sys/fileInfo/getFileInfoByIds', data);
}
