package com.ssyf.module.robot.service;

import com.github.pagehelper.PageInfo;
import com.ssyf.module.robot.domain.entity.RConfigRelation;
import com.ssyf.module.robot.domain.query.RConfigRelationQuery;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
* @author ELSA
* @description 针对表【r_config_relation(配置关联表)】的数据库操作Service
* @createDate 2025-12-18 10:53:31
*/
public interface RConfigRelationService extends IService<RConfigRelation> {

    /**
     * 新增一条配置关联记录
     *
     * @param query 配置关联查询条件
     * @return 配置关联实体
     */
    RConfigRelation addOne(RConfigRelationQuery query);

    /**
     * 根据UUID删除配置关联记录
     *
     * @param uuid 配置关联唯一标识
     */
    void removeByUid(String uuid);

    /**
     * 批量删除配置关联记录
     *
     * @param uuids 配置关联唯一标识列表
     */
    void removeBatchByUids(List<String> uuids);

    /**
     * 根据UUID更新配置关联记录
     *
     * @param uuid 配置关联唯一标识
     * @param query 配置关联查询条件
     */
    void updateByUid(String uuid, RConfigRelationQuery query);

    /**
     * 根据UUID获取配置关联记录
     *
     * @param uuid 配置关联唯一标识
     * @return 配置关联实体
     */
    RConfigRelation getOneByUid(String uuid);

    /**
     * 分页查询配置关联记录
     *
     * @param query 查询条件
     * @return 分页结果
     */
    PageInfo<RConfigRelation> getPage(RConfigRelationQuery query);

    /**
     * 查询配置关联记录列表
     *
     * @param query 查询条件
     * @return 配置关联记录列表
     */
    List<RConfigRelation> getList(RConfigRelationQuery query);

    /**
     * 检查配置关联记录是否存在并返回
     *
     * @param uuid 配置关联唯一标识
     * @return 配置关联实体
     */
    RConfigRelation checkedExistAndGet(String uuid);

    /**
     * 根据条件统计配置关联记录数量
     *
     * @param query 查询条件
     * @return 记录数量
     */
    Integer countBy(RConfigRelationQuery query);

    /**
     * 根据分组UUID获取配置关联信息
     *
     * @param groupUuid 分组UUID
     * @param configType 配置类型（可选）
     * @return 配置关联列表
     */
    List<RConfigRelation> getByGroupUuid(String groupUuid, String configType);

    /**
     * 根据分组UUID获取有效的配置关联信息（在有效时间范围内）
     *
     * @param groupUuid 分组UUID
     * @param configType 配置类型（可选）
     * @return 配置关联列表
     */
    List<RConfigRelation> getValidByGroupUuid(String groupUuid, String configType);

    /**
     * 根据机器人UUID获取配置关联信息
     *
     * @param robotUuid 机器人UUID
     * @param configType 配置类型（可选）
     * @return 配置关联列表
     */
    List<RConfigRelation> getByRobotUuid(String robotUuid, String configType);

    /**
     * 根据机器人UUID获取有效的配置关联信息（在有效时间范围内）
     *
     * @param robotUuid 机器人UUID
     * @param configType 配置类型（可选）
     * @return 配置关联列表
     */
    List<RConfigRelation> getValidByRobotUuid(String robotUuid, String configType);

    /**
     * 根据配置UUID列表获取配置关联信息
     *
     * @param configUuids 配置UUID列表
     * @param configType 配置类型（可选）
     * @return 配置关联列表
     */
    List<RConfigRelation> getByConfigUuids(List<String> configUuids, String configType);

    /**
     * 根据机器人UUID列表获取配置关联信息
     *
     * @param robotUuids 机器人UUID列表
     * @param configType 配置类型（可选）
     * @return 配置关联列表
     */
    List<RConfigRelation> getByRobotUuids(List<String> robotUuids, String configType);

    List<RConfigRelation> getAvailableConfigs();
}
