package com.fs.company.service.easycall;

import com.fs.company.vo.easycall.*;

import java.util.List;

/**
 * @description EasyCallCenter365 外呼服务接口
 */
public interface IEasyCallService {

    /**
     * 获取网关列表
     *
     * @param companyId 公司id
     * @return 网关列表
     */
    List<EasyCallGatewayVO> getGatewayList(Long companyId);

    /**
     * 获取大模型配置列表
     *
     * @param companyId 公司id
     * @return 大模型配置列表
     */
    List<EasyCallLlmAccountVO> getLlmAccountList(Long companyId);

    /**
     * 获取音色列表
     *
     * @param companyId 公司id
     * @return 音色列表
     */
    List<EasyCallVoiceCodeVO> getVoiceCodeList(Long companyId);

    /**
     * 获取技能组列表
     *
     * @param companyId 公司id
     * @return 技能组列表
     */
    List<EasyCallBusiGroupVO> getBusiGroupList(Long companyId);

    /**
     * 任务列表查询
     *
     * @param param     查询参数
     * @param companyId 公司id
     * @return 分页任务列表
     */
    EasyCallPageResult<EasyCallTaskVO> getTaskList(EasyCallTaskQueryParam param, Long companyId);

    /**
     * 通话记录查询
     *
     * @param param     查询参数
     * @param companyId 公司id
     * @return 分页通话记录
     */
    EasyCallPageResult<EasyCallRecordVO> getRecordList(EasyCallRecordQueryParam param, Long companyId);

    /**
     * 创建外呼任务
     *
     * @param param     任务参数
     * @param companyId 公司id
     * @return 创建结果
     */
    EasyCallTaskVO createTask(EasyCallCreateTaskParam param, Long companyId);

    /**
     * 启动外呼任务
     *
     * @param batchId   任务id
     * @param companyId 公司id
     */
    void startTask(Long batchId, Long companyId);

    /**
     * 停止外呼任务
     *
     * @param batchId   任务id
     * @param companyId 公司id
     */
    void stopTask(Long batchId, Long companyId);

    /**
     * AI外呼追加名单
     *
     * @param param     追加参数
     * @param companyId 公司id
     */
    void addAiCallList(EasyCallAddCallListParam param, Long companyId);

    /**
     * 通用追加名单（支持AI外呼和通知提醒任务）
     *
     * @param param     追加参数
     * @param companyId 公司id
     */
    void addCommonCallList(EasyCallCommonAddCallListParam param, Long companyId);

    /**
     * 获取录音文件访问URL
     *
     * @param wavFileUrl 录音文件相对路径
     * @param companyId  公司id
     * @return 完整的录音文件URL
     */
    String getRecordFileUrl(String wavFileUrl, Long companyId);
}
