package com.seer.teach.teacher.service;

import com.seer.teach.teacher.common.llm.sse.req.Message;
import com.seer.teach.teacher.service.platform.LlmResponse;
import com.seer.teach.teacher.service.platform.StreamingTextToAudioResult;
import com.seer.teach.teacher.service.platform.TextToAudioResult;
import org.springframework.http.codec.ServerSentEvent;
import reactor.core.publisher.Flux;

import java.util.List;
import java.util.Map;
import java.util.Queue;

/**
 * AI模型调用服务接口
 *
 * @author System
 * @since 2025-10-27
 */
public interface AiModelCallService {

    /**
     * 通用的模型调用方法
     *
     * @param params       业务参数
     * @param scenarioCode 场景code
     * @return 调用结果
     */
    LlmResponse callModel(String scenarioCode, String prompt, Map<String, Object> params,Integer userId);

    /**
     * 通用的模型调用方法
     *
     * @param params       业务参数
     * @param scenarioCode 场景code
     * @return 调用结果
     */
    LlmResponse callModel(String scenarioCode, List<Message> messages, Map<String, Object> params, Integer userId);

    /**
     * 文本转音频
     *
     * @param params       业务参数
     * @param scenarioCode 场景code
     * @return 调用结果返回的任务Id
     */
    Queue<StreamingTextToAudioResult> asyncCallText2Audio(String scenarioCode, String text, Map<String, Object> params, Integer userId);
    
    /**
     * 文本转音频流式接口
     *
     * @param scenarioCode 场景code
     * @param text         要转换的文本
     * @param params       业务参数
     * @param userId       用户ID
     * @return 流式的音频和字幕数据
     */
    Flux<ServerSentEvent<StreamingTextToAudioResult>> streamText2Audio(String scenarioCode, String text, Map<String, Object> params, Integer userId);

    /**
     * 通用的模型异步调用方法
     *
     * @param params       业务参数
     * @param scenarioCode 场景code
     * @return 调用结果返回的任务Id
     */
    String asyncCallText2ImageModel(String scenarioCode, String prompt, Map<String, Object> params, Integer userId);

    /**
     * 获取任务结果
     *
     * @param taskId 任务Id
     * @return 任务结果
     */
    List<String> getTaskResult(String taskId);
}