package com.rj.service;

import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.rj.common.AudioAnalysisSceneType;
import com.rj.common.LocalLlmSummaryResult;
import com.rj.entity.AudioTextAnalysisFurniture;

/**
 * 音频文本分析 - 大模型通用服务
 * <p>
 * 封装不同业务场景下的大模型调用逻辑（提示词加载、模型选择等），
 * 控制层只需要关心场景类型和原始录音文本。
 * </p>
 */
public interface IAudioTextAnalysisLlmService {

    /**
     * 调用大模型生成总结/结构化结果（通用方法）
     *
     * @param sceneType     业务场景类型（家具、会议、房产等）
     * @param recordingText 录音转写文本
     * @return 大模型返回的原始内容（一般是 JSON 字符串或结构化文本）
     */
    GenerationResult generateSummaryByLLM(AudioAnalysisSceneType sceneType, String recordingText);

    /**
     * 与 {@link #generateSummaryByLLM} 相同的提示词与场景逻辑，但通过本地 OpenAI 兼容接口调用大模型
     * （配置项与客户问答本地模型一致：{@code ai.qa.local.chat-url}、{@code ai.qa.local.default-model}、{@code ai.qa.local.max-tokens}；
     * 另支持 {@code ai.qa.local.context-length}、{@code ai.qa.local.token-margin}、{@code ai.qa.local.min-output-tokens}、{@code ai.qa.local.input-tokens-per-char} 以避免超出本地模型上下文。）
     *
     * @param sceneType     业务场景类型
     * @param recordingText 录音转写文本
     * @return 大模型返回的原始内容及 token 用量（若接口未返回 usage 则对应字段可能为 null）
     */
    LocalLlmSummaryResult generateSummaryByLocalLLM(AudioAnalysisSceneType sceneType, String recordingText);

    /**
     * 处理完整的业务逻辑：调用大模型生成总结，解析JSON，保存数据
     * 此方法用于家具场景的完整业务处理
     *
     * @param sceneType     业务场景类型
     * @param recordingText 录音转写文本
     * @param parentId      父ID（AudioManagement的ID）
     * @param ownerName     所属人姓名
     * @param ownerPhone    所属人电话
     * @param customerName  客户姓名
     * @param customerPhone 客户电话
     * @return 保存后的AudioTextAnalysisFurniture对象，如果处理失败返回null
     */
    AudioTextAnalysisFurniture generateSummaryAndSave(
            AudioAnalysisSceneType sceneType,
            String recordingText,
            String parentId,
            String ownerName,
            String ownerPhone,
            String customerName,
            String customerPhone);

    /**
     * 处理完整的业务逻辑：调用大模型生成总结，解析JSON，保存数据
     * 此方法用于家具场景的完整业务处理
     *
     * @param sceneType     业务场景类型
     * @param recordingText 录音转写文本
     * @param parentId      父ID（AudioManagement的ID）
     * @param ownerName     所属人姓名
     * @param ownerPhone    所属人电话
     * @param customerName  客户姓名
     * @param customerPhone 客户电话
     * @return 保存后的AudioTextAnalysisFurniture对象，如果处理失败返回null
     */
    AudioTextAnalysisFurniture generateSummaryAndSave_V2(
            AudioAnalysisSceneType sceneType,
            String recordingText,
            String parentId,
            String ownerName,
            String ownerPhone,
            String customerName,
            String customerPhone);

    AudioTextAnalysisFurniture generateSummaryAndSaveForDetail(
            AudioAnalysisSceneType sceneType,
            String recordingText,
            String parentId,
            String ownerName,
            String ownerPhone,
            String customerName,
            String customerPhone);
}


