package com.tashow.cloud.ai.service.model;

import com.tashow.cloud.ai.controller.admin.model.vo.AiModelAnalysisResultVO;
import com.tashow.cloud.ai.controller.admin.model.vo.AiModelDifferenceVO;
import com.tashow.cloud.ai.controller.admin.model.vo.AiModelPageReqVO;
import com.tashow.cloud.ai.controller.admin.model.vo.AiModelSaveReqVO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleDO;
import com.tashow.cloud.ai.dal.dataobject.model.AiModelDO;
import com.tashow.cloud.common.pojo.PageResult;
import jakarta.validation.Valid;

import java.util.List;

/**
 * AI模型管理 Service 接口
 *
 * @author tashow
 */
public interface AiModelService {

    /**
     * 创建模型
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createModel(@Valid AiModelSaveReqVO createReqVO);

     /**
     * 更新模型
     *
     * @param updateReqVO 更新信息
     */
    void updateModel(@Valid AiModelSaveReqVO updateReqVO);

    /**
     * 删除模型
     *
     * @param id 编号
     */
    void deleteModel(Long id);

    /**
     * 获取所有已启用的模型
     *
     * @return 已启用的模型列表
     */
    List<AiModelDO> getEnabledModels();

    /**
     * 获得模型分页
     *
     * @param pageReqVO 分页查询
     * @return 模型分页
     */
    PageResult<AiModelDO> getModelPage(AiModelPageReqVO pageReqVO);

    /**
     * 模型引用样本（覆写式）
     *
     * @param modelId 模型ID
     * @param sampleIds 样本ID列表
     */
    void referenceSamples(Long modelId, List<Long> sampleIds);

    /**
     * 获取模型关联的样本
     *
     * @param modelId 模型ID
     * @return 样本列表
     */
    List<AiSampleDO> getModelSamples(Long modelId);

    /**
     * 模型准确度分析（通过翻译接口分析样本匹配度）
     *
     * @param modelId 模型ID
     * @return 分析结果
     */
    AiModelAnalysisResultVO analyzeModel(List<Long> sampleIds, List<Long> modelIds);

    /**
     * 模型样本差异筛查（支持多模型）
     *
     * @param modelIds 模型ID列表
     * @return 差异结果（重复引用样本和未重复引用样本）
     */
    AiModelDifferenceVO checkDifference(List<Long> modelIds);

    /**
     * 模型迭代（复制模型和样本关联）
     *
     * @param modelId 原模型ID
     * @param newVersion 新版本号
     * @param description 版本描述
     * @return 新模型ID
     */
    Long iterateModel(Long modelId, String newVersion, String description);

}
