/**
 * 空镜素材 API 模块
 * =================
 *
 * 通过后端接口匹配空镜素材，基于 PostgreSQL + Redis 项目级去重。
 */

import { client } from '../client';

export interface MaterialInfo {
  url: string;
  duration: number;
}

export interface BatchMatchSceneItem {
  scene: string;
  duration: number;
}

export interface BatchMatchResponse {
  projectId: string | null;
  results: Array<MaterialInfo | null>;
}

/**
 * 根据场景描述和所需时长匹配空镜素材
 *
 * @param scene 分镜场景描述
 * @param duration 所需时长（秒）
 * @param projectId 项目ID，用于跨分镜去重（可选）
 * @returns 匹配到的素材信息，无匹配返回 null
 */
export async function matchMaterial(
  scene: string,
  duration: number,
  projectId?: string,
): Promise<MaterialInfo | null> {
  // client.post 会自动剥离 ApiResponse 包装，直接返回 data 字段
  // camelCase 字段会自动转换为 snake_case 发给后端
  return client.post<MaterialInfo | null>('/materials/match', {
    scene,
    duration,
    projectId,
  });
}

/**
 * 批量匹配空镜素材
 *
 * @param scenes 分镜场景列表，每项包含 scene 和 duration
 * @param projectId 项目ID，用于跨分镜去重（可选）
 * @returns 批量匹配结果，results 与 scenes 一一对应
 */
export async function batchMatch(
  scenes: BatchMatchSceneItem[],
  projectId?: string,
): Promise<BatchMatchResponse> {
  return client.post<BatchMatchResponse>('/materials/batch-match', {
    scenes,
    projectId,
  });
}
