package cn.iocoder.yudao.module.llm.service.application;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.llm.controller.admin.application.vo.ApplicationPageReqVO;
import cn.iocoder.yudao.module.llm.controller.admin.application.vo.ApplicationRespVO;
import cn.iocoder.yudao.module.llm.controller.admin.application.vo.ApplicationSaveReqVO;
import cn.iocoder.yudao.module.llm.dal.dataobject.application.ApplicationDO;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 大模型应用 Service 接口
 *
 * @author 华大大模型
 */
public interface ApplicationService {

    /**
     * 创建大模型应用
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createApplication (@Valid ApplicationSaveReqVO createReqVO);

    /**
     * 更新大模型应用
     *
     * @param updateReqVO 更新信息
     */
    void updateApplication (@Valid ApplicationSaveReqVO updateReqVO);

    /**
     * 删除大模型应用
     *
     * @param id 编号
     */
    void deleteApplication (Long id);

    /**
     * 获得大模型应用
     *
     * @param id 编号
     * @return 大模型应用
     */
    ApplicationRespVO getApplication (Long id);

    /**
     * 获得大模型应用分页
     *
     * @param pageReqVO 分页查询
     * @return 大模型应用分页
     */
    PageResult<ApplicationRespVO> getApplicationPage (ApplicationPageReqVO pageReqVO);

    List<ApplicationRespVO> getApplicationList (ApplicationPageReqVO pageReqVO);

    List<ApplicationDO> getList ();

    ApplicationDO getByApiKey (String apiKey);

    /**
     * 获取应用Map
     *
     * @return Map<Long, String>
     */
    Map<Long, String> getApplicatioMap ();

    /**
     * 根据 标签id 获取 应用
     *
     * @param labelId 标签id
     * @return 应用
     */
    Map<Long, String> getApplicationByLabelId (Long labelId);

    /**
     * 根据 Prompt模版id 获取 应用
     *
     * @param templateId Prompt模版 id
     * @return 应用
     */
    Map<Long, String> validatePromptTemplateUsesInApp (Long templateId);

    /**
     * 根据 知识库id 获取 应用
     *
     * @param knowledgeId 知识库id
     * @return 应用
     */
    Map<Long, String> getApplicationByKnowledgeId (Long knowledgeId);

    /**
     * 根据 基础模型id 获取 应用
     *
     * @param baseModelId 基础模型id
     * @return 应用
     */
    Map<Long, String> getApplicationByBaseModelId (Long baseModelId);

    /**
     * 根据 模型服务id 获取 应用
     *
     * @param modelServiceId 模型服务id
     * @return 应用
     */
    Map<Long, String> getApplicationByModelServiceId (Long modelServiceId);
}
