import request from "@/utils/request";
import type { PaginationParams } from "@/types/api";

// ==================== AI 3D 任务相关类型 ====================

/**
 * AI 3D 任务状态
 */
export type AI3DTaskStatus =
  | "pending"
  | "processing"
  | "completed"
  | "failed"
  | "timeout";

/**
 * AI 3D 任务输入类型
 */
export type AI3DInputType = "text" | "image";

/**
 * AI 3D 任务
 */
export interface AI3DTask {
  id: number;
  tenantId: number;
  userId: number;
  inputType: AI3DInputType;
  inputContent: string;
  status: AI3DTaskStatus;
  resultUrl?: string;
  previewUrl?: string;
  // 多结果支持（文生3D会生成4个不同角度的模型）
  resultUrls?: string[];
  previewUrls?: string[];
  errorMessage?: string;
  externalTaskId?: string;
  retryCount: number;
  createTime: string;
  completeTime?: string;
  // 队列位置（仅 pending 状态时返回）
  queuePosition?: number;
}

/**
 * 模型生成类型
 */
export type AI3DGenerateType = "Normal" | "LowPoly" | "Geometry" | "Sketch";

/**
 * 创建任务参数
 */
export interface CreateAI3DTaskParams {
  inputType: AI3DInputType;
  inputContent: string;
  /** 模型生成类型：Normal-带纹理, LowPoly-低多边形, Geometry-白模, Sketch-草图 */
  generateType?: AI3DGenerateType;
  /** 模型面数：10000-1500000，默认500000 */
  faceCount?: number;
}

/**
 * 查询任务参数
 */
export interface QueryAI3DTaskParams extends PaginationParams {
  status?: AI3DTaskStatus;
}

/**
 * 任务列表响应
 */
export interface AI3DTaskListResponse {
  list: AI3DTask[];
  total: number;
  page: number;
  pageSize: number;
}

// ==================== API 接口 ====================

/**
 * 创建生成任务
 * POST /api/ai-3d/generate
 */
export function createAI3DTask(data: CreateAI3DTaskParams) {
  return request.post<AI3DTask>("/ai-3d/generate", data);
}

/**
 * 获取任务列表
 * GET /api/ai-3d/tasks
 */
export function getAI3DTasks(params?: QueryAI3DTaskParams) {
  return request.get<AI3DTaskListResponse>("/ai-3d/tasks", { params });
}

/**
 * 获取任务详情
 * GET /api/ai-3d/tasks/:id
 */
export function getAI3DTask(id: number) {
  return request.get<AI3DTask>(`/ai-3d/tasks/${id}`);
}

/**
 * 重试任务
 * POST /api/ai-3d/tasks/:id/retry
 */
export function retryAI3DTask(id: number) {
  return request.post<AI3DTask>(`/ai-3d/tasks/${id}/retry`);
}

/**
 * 删除任务
 * DELETE /api/ai-3d/tasks/:id
 */
export function deleteAI3DTask(id: number) {
  return request.delete(`/ai-3d/tasks/${id}`);
}
