package com.fs.aiSoundReplication.service;


import com.fs.aiSoundReplication.param.StatusResponse;
import com.fs.aiSoundReplication.param.UploadResponse;
import com.fs.common.core.domain.R;
import org.springframework.web.multipart.MultipartFile;

public interface VoiceCloneService {

    /**
     * 上传音频训练音色
     * @param speakerId 音色ID
     * @param audioFile 音频文件
     * @param modelType 模型类型 1-ICL1.0, 2-DiT标准版, 3-DiT还原版, 4-ICL2.0
     * @param language 语种 0-中文, 1-英文等
     * @return 上传响应
     */
    R uploadVoice(String speakerId, MultipartFile audioFile,
                  Integer modelType, Integer language);

    /**
     * 上传音频训练音色（使用文件路径）
     */
    UploadResponse uploadVoiceByPath(String speakerId, String filePath,
                                     Integer modelType, Integer language);

    /**
     * 查询音色训练状态
     * @param speakerId 音色ID
     * @return 状态响应
     */
    StatusResponse queryTrainingStatus(String speakerId);

    /**
     * 轮询音色训练状态
     * @param speakerId 音色ID
     * @param maxPollingTimes 最大轮询次数
     * @param pollingInterval 轮询间隔（毫秒）
     * @return 最终状态响应
     */
    StatusResponse pollTrainingStatus(String speakerId, Integer maxPollingTimes,
                                      Long pollingInterval);

    /**
     * 获取资源ID（根据模型类型）
     * @param modelType 模型类型
     * @return 资源ID
     */
    String getResourceIdByModelType(Integer modelType);
}
