package com.infoepoch.pms.agent.platform.model.domain.irepository;

import com.infoepoch.pms.agent.platform.model.domain.AiModelConfig;

import java.util.List;
import java.util.Optional;

/**
 * @author jiangyz
 * @date 2026/4/17 15:07
 * AI 模型配置表仓储接口
 */
public interface IAiModelConfigRepository {
    /**
     * 新增
     * @param: [entity]
     */
    boolean insert(AiModelConfig entity);

    /**
     * 更新
     * @param: [entity]
     */
    boolean update(AiModelConfig entity);

    /**
     * 批量新增
     * @param: [entitys]
     */
    int[] batchInsert(List<AiModelConfig> entitys);

    /**
     * 批量更新
     * @param: [entitys]
     */
    int[] batchUpdate(List<AiModelConfig> entitys);

    /**
     * 删除
     * @param: [id]
     */
    boolean delete(String id);

    // region select

    /**
     * 根据Id查询
     * @param: [id]
     */
    AiModelConfig selectById(String id);

    /**
     * 根据查询条件查询单个对象
     * @param: [criteria]
     */
    AiModelConfig selectOneByCriteria(AiModelConfigCriteria criteria);

    /**
     * 根据查询条件查询对象集合
     * @param: [criteria]
     */
    List<AiModelConfig> selectByCriteria(AiModelConfigCriteria criteria);

    /**
     * 根据查询条件分页查询对象结合
     * @param: [criteria, pageNum, pageSize]
     */
    List<AiModelConfig> selectCriteriaByPage(AiModelConfigCriteria criteria, int pageNum, int pageSize);

    /**
     * 根据条件查询对象总记录数
     * @param: [criteria]
     */
    Integer selectCountByCriteria(AiModelConfigCriteria criteria);

    // endregion

    Optional<AiModelConfig> findById(String id);

    AiModelConfig save(AiModelConfig entity);

    boolean existsByProviderIdAndModelNameAndModelType(String providerId, String modelName, String modelType);

    boolean existsByProviderIdAndModelNameAndModelTypeAndIdNot(String providerId,
                                                               String modelName,
                                                               String modelType,
                                                               String id);

    List<AiModelConfig> findAllByProviderIdOrderByCreatedAtDesc(String providerId);

    List<AiModelConfig> findAllByProviderId(String providerId);
}
