import { SYSTEM_SERVICE_PREFIX } from '@/constants/service';
import { request } from '../request';

const FILE_PREFIX = `${SYSTEM_SERVICE_PREFIX}/file`;

export interface UploadFileResult {
  /** infra_file.id 的字符串形式（避免 Long 精度丢失） */
  id: string;
  /** 文件访问 URL：私有桶带签名、公开桶裸 URL */
  url: string;
}

/** 上传文件（模式一：后端中转） */
export function uploadFile(file: File, directory?: string) {
  const formData = new FormData();
  formData.append('file', file);
  if (directory) {
    formData.append('directory', directory);
  }

  return request<UploadFileResult>({
    url: `${FILE_PREFIX}/upload`,
    method: 'post',
    data: formData
  });
}

/**
 * 删除文件
 *
 * 业务表单"取消/关闭/标记删除"场景调用本接口清理孤儿文件。
 * 删除已不存在的文件（后端返回错误码 `1001003001`）应由调用方视为成功并吞掉。
 */
export function deleteFile(id: string) {
  return request<boolean>({
    url: `${FILE_PREFIX}/delete`,
    method: 'delete',
    params: { id }
  });
}

/**
 * 下载文件（流）
 *
 * 走后端代理接口 `/system/file/download?id=xxx`，由后端读取对象存储并以字节流返回。
 * 私有桶下不要直接打开 `infra_file.url`，签名地址会过期。
 */
export function downloadFile(id: string) {
  return request<Blob, 'blob'>({
    url: `${FILE_PREFIX}/download`,
    method: 'get',
    params: { id },
    responseType: 'blob'
  });
}
