package cn.com.poc.ai_software_copyright.aggregate;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import cn.com.gsst.dify_client.exception.DifyApiException;
import cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightEnum;
import cn.com.poc.ai_software_copyright.domain.BaseInfo;
import cn.com.poc.ai_software_copyright.domain.TechnicalContent;
import cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightDocRecordEntity;
import cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightEntity;
import cn.com.poc.ai_software_copyright.entity.CallbackEntity;
import cn.com.yict.framemax.data.model.PagingInfo;
import org.springframework.web.multipart.MultipartFile;

/**
 * AI软著-聚合服务
 *
 * @author alex.yao
 * @date 2025/12/26
 */
public interface SoftwareCopyRightService {

    /**
     * 软著-保存
     *
     * @param baseInfo                 软著基本信息
     * @param technicalContent         软著技术内容
     * @param referenceDocumentFileUrl 参考文件
     * @param generatedDocType         生成文档类型
     */
    BizSoftwareCopyrightEntity save(BaseInfo baseInfo, TechnicalContent technicalContent,
                                    List<String> referenceDocumentFileUrl, List<String> generatedDocType);

    /**
     * 软著AI助手
     *
     * @param type     助手类型
     * @param fileUrls 文件地址
     * @param question 对话 内容
     * @param data     输入参数
     */
    void softwareCopyRightAssistant(
            AiSoftWareCopyRightEnum.AI_ASSISTANT_TYPE type,
            List<String> fileUrls,
            String question,
            Map<String, Object> data
    ) throws InterruptedException, DifyApiException, IOException;

    /**
     * AI-生成技术内容
     *
     * @param fileUrls
     * @param baseInfo
     * @return
     */
    TechnicalContent createTechnicalContent(List<String> fileUrls, BaseInfo baseInfo) throws IOException;

    /**
     * AI软著-文件列表
     *
     * @param id biz_software_copyright 主键id
     */
    BizSoftwareCopyrightDocRecordEntity listFile(Long id);

    /**
     * 获取下载地址
     *
     * @param id biz_software_copyright 主键id
     * @return 文件下载地址
     */
    String getDownloadUrl(Long id) throws Exception;

    /**
     * 文件上传
     *
     * @param file 文件
     * @return 文件地址
     */
    String upload(MultipartFile file) throws IOException;

    /**
     * 软著查询
     *
     * @param query           查询条件
     * @param generatedStatus 生成状态
     * @param pagingInfo      分页信息
     * @return 软著列表
     */
    List<BizSoftwareCopyrightEntity> querySoftwareCopyRight(String query, String generatedStatus,
                                                            PagingInfo pagingInfo);

    /**
     * 回调-生成基础文档
     *
     * @param taskId         回调任务ID
     * @param type           回调类型
     * @param callbackEntity 回调结果
     */
    void callbackGeneratedBaseDoc(String taskId, String type, CallbackEntity callbackEntity);
}
