package com.yaoai.pipeline.service;

import com.yaoai.domain.entity.AiTask;
import com.yaoai.pipeline.dto.StructuredVideoSubmission;

import java.util.List;

public interface VideoTaskPipelineService {

    /**
     * 提交图生视频任务：上传图片到 TOS → 调用 Seedance API → 存 ai_tasks
     */
    AiTask submitVideoTask(Long projectId, Long tenantId, Long episodeId,
                           Long storyboardId, String imageKey, String prompt);

    /**
     * 异步文生图→图生视频：立即创建 pending 任务并返回，后台执行图片生成和视频提交
     * preImageKeys 非空时跳过 Seedream，按顺序作为 @图1/@图2... 参考图提交 Seedance
     *
     * @param preImageKeys 按 @图N 顺序排列的 TOS key 列表，空列表则走文生图
     * @param durationSeconds 视频时长（秒），<=0 则使用默认值 5
     * @deprecated 由 {@link #submitStructuredVideoTask} 替代；保留 1 个版本周期供回滚
     */
    @Deprecated
    AiTask submitTextToVideoAsync(Long projectId, Long tenantId, Long userId, Long episodeId,
                                  Long storyboardId, String imagePrompt, String videoPrompt,
                                  List<String> preImageKeys, int durationSeconds);

    /**
     * 结构化视频生成（左图 + 右提示词）：把素材选择 + 五段提示词转成 Seedance 调用。
     * 立即创建 pending 任务并返回，后台异步提交 Seedance 并轮询。
     */
    AiTask submitStructuredVideoTask(Long projectId, Long tenantId, StructuredVideoSubmission submission);

    /**
     * 轮询任务状态：查询 Seedance API，更新 DB
     */
    AiTask pollTaskStatus(Long taskId, Long tenantId);

    /** 删除视频任务（租户隔离） */
    void deleteTask(Long taskId, Long tenantId);

    List<AiTask> listByProject(Long projectId, Long tenantId);
}
