package com.cmvr.tts.service;

import com.cmvr.common.core.page.TableDataInfo;
import com.cmvr.tts.domain.TtsSynthesizeTask;
import com.cmvr.tts.domain.vo.TtsSynthesizeTaskVo;

import jakarta.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * TTS合成任务Service接口
 *
 * @author cmvr
 */
public interface ITtsSynthesizeTaskService {

    /**
     * 查询TTS合成任务列表
     *
     * @param task TTS合成任务
     * @return TTS合成任务集合
     */
    TableDataInfo selectTtsTaskList(TtsSynthesizeTask task);

    /**
     * 查询TTS合成任务
     *
     * @param id TTS合成任务主键
     * @return TTS合成任务
     */
    TtsSynthesizeTaskVo selectTtsTaskById(String id);

    /**
     * 新增TTS合成任务
     *
     * @param task TTS合成任务
     * @return 结果
     */
    TtsSynthesizeTask insertTtsTask(TtsSynthesizeTask task);

    /**
     * 批量新增TTS合成任务
     *
     * @param tasks TTS合成任务列表
     * @return 结果
     */
    int batchInsertTtsTask(List<TtsSynthesizeTask> tasks);

    /**
     * 修改TTS合成任务
     *
     * @param task TTS合成任务
     * @return 结果
     */
    int updateTtsTask(TtsSynthesizeTask task);

    /**
     * 删除TTS合成任务
     *
     * @param ids 需要删除的TTS合成任务主键集合
     * @return 结果
     */
    int deleteTtsTaskByIds(String[] ids);

    /**
     * 重生成TTS任务
     *
     * @param taskId 任务ID
     * @return 结果
     */
    int regenerateTask(String taskId);

    /**
     * 获取音频文件流
     *
     * @param taskId 任务ID
     * @param response 响应
     */
    void getAudioStream(String taskId, HttpServletResponse response);

    /**
     * 导出TTS合成任务列表
     *
     * @param task TTS合成任务
     * @return 结果
     */
    byte[] exportTtsTaskList(TtsSynthesizeTask task);

    /**
     * 查询看板统计数据
     *
     * @return 统计数据
     */
    Map<String, Object> getDashboardStats();

    /**
     * 按语种统计
     *
     * @return 统计数据
     */
    List<Map<String, Object>> getStatsByLanguage();

    /**
     * 按音色统计
     *
     * @return 统计数据
     */
    List<Map<String, Object>> getStatsByVoice();

    /**
     * 按情绪统计
     *
     * @return 统计数据
     */
    List<Map<String, Object>> getStatsByEmotion();

    /**
     * 近7日趋势
     *
     * @return 趋势数据
     */
    List<Map<String, Object>> getLast7DaysTrend();

    /**
     * 保存任务到语料库
     *
     * @param taskId 任务ID
     * @param categoryId 分类ID
     * @return 结果
     */
    int saveToCorpus(String taskId, String categoryId);
}
