package com.seer.teach.teacher.service.platform;

import java.util.Optional;
import java.util.Queue;

import org.springframework.http.codec.ServerSentEvent;
import reactor.core.publisher.Flux;

/**
 * AI平台调用服务接口
 * 用于为不同平台提供具体的调用实现
 */
public interface AiPlatformCallService {

    /**
     * 文本生成模型调用方法
     *
     * @param request  请求参数
     * @return 调用结果
     */
    default Optional<LlmResponse> callTextModel(LlmRequest request){
        return Optional.empty();
    }

    /**
     * 图片生成模型调用方法
     *
     * @param request  请求参数
     * @return 调用结果
     */
    default Optional<LlmResponse> callImageModel(LlmRequest request){
        return Optional.empty();
    }

    /**
     * 图片生成模型异步调用方法
     *
     * @param request  请求参数
     * @return 调用的任务ID
     */
    default Optional<String> asyncCallImageModel(LlmRequest request){
        return Optional.empty();
    }

    /**
     * 获取任务结果
     *
     * @param taskRequest 请求参数
     * @return 任务结果
     */
    default Optional<LlmResponse> getTaskResult(LlmTaskRequest taskRequest) {
        return Optional.empty();
    }

    /**
     * 获取支持的平台编码
     *
     * @return 平台编码
     */
    String getSupportedPlatform();

    /**
     * 文本转音频模型调用方法
     *
     * @param request  请求参数
     * @return 音频数据和字幕数据
     */
    default Queue<StreamingTextToAudioResult> callText2Audio(LlmRequest request){
        return null;
    }
    
    /**
     * 流式文本转音频模型调用方法
     *
     * @param request 请求参数
     * @return 流式的音频数据和字幕数据
     */
    default Flux<ServerSentEvent<StreamingTextToAudioResult>> streamText2Audio(LlmRequest request) {
        return Flux.empty();
    }
}