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

import com.tashow.cloud.ai.controller.admin.aisample.vo.*;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleDO;
import com.tashow.cloud.common.pojo.PageResult;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;

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

/**
 * 样本库 Service 接口
 *
 * @author 芋道源码
 */
public interface AiSampleService {

    /**
     * 创建样本库
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    List<AiSampleFileRespVO> createAiSample(@Valid FileUploadReqVO createReqVO);

    /**
     * 更新样本库
     *
     * @param updateReqVO 更新信息
     */
    void updateAiSample(@Valid AiSampleSaveReqVO updateReqVO);

    /**
     * 批量更新
     * @param updateReqVO
     */
    void updateAiSamples(@Valid List<AiSampleSaveReqVO> updateReqVO);

    /**
     * 关联标签
     * @param relateTagVO
     */
    void relate(@Valid AiSampleRelateTagVO relateTagVO);
    /**
     * 删除样本库
     *
     * @param id 编号
     */
    void deleteAiSample(String id);

    /**
     * 删除样本库
     * @param relateTagVO 编号
     */
    void deleteRelate(AiSampleRelateTagVO relateTagVO);

    /**
     * 获得样本库
     *
     * @param id 编号
     * @return 样本库
     */
    AiSampleDO getAiSample(Long id);

    /**
     * 获得样本库分页
     *
     * @param pageReqVO 分页查询
     * @return 样本库分页
     */
    PageResult<AiSampleDO> getAiSamplePage(AiSamplePageReqVO pageReqVO);

    /**
     * 批量下载样本
     *
     * @param ids 样本ID列表（逗号分隔）
     * @param response HTTP响应
     */
    void downloadSamples(String ids, HttpServletResponse response) throws IOException;

    /**
     * 样本关联模型（覆写逻辑）
     *
     * @param sampleIds 样本ID列表
     * @param modelIds 模型ID列表
     */
    void relateSamples(List<Long> sampleIds, List<Long> modelIds);

    /**
     * 构建样本响应VO（包含枚举标签、个性标签、关联模型）
     *
     * @param sample 样本DO
     * @return 样本响应VO
     */
    AiSampleRespVO buildSampleRespVO(AiSampleDO sample);

}
