package com.cool.store.mapper.dict;

import com.cool.store.entity.dict.SysDictColumnDO;
import com.cool.store.request.dict.DictColumnQueryRequest;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author zhangchenbiao
 * @date 2025-09-25 06:34
 */
public interface SysDictColumnMapper {
    /**
     *
     * 默认插入方法，只会给有值的字段赋值
	 * 会对传进来的字段做判空处理，如果字段为空，则使用数据库默认字段或者null
     * dateTime:2025-09-25 06:34
     */
    int insertSelective(@Param("record") SysDictColumnDO record);

    /**
     *
     * 默认更新方法，根据主键更新，不会把null值更新到数据库，避免覆盖之前有值的
     * dateTime:2025-09-25 06:34
     */
    int updateByPrimaryKeySelective(@Param("record") SysDictColumnDO record);

    /**
     * 查询已存在的字典项
     * @param columnCode 字典项编码
     * @return com.coolcollege.intelligent.model.dict.SysDictColumnDO
     */
    SysDictColumnDO selectExistColumn(@Param("id") Long id,
                                      @Param("columnCode") String columnCode);

    /**
     * 根据id批量删除
     * @param ids id列表
     * @return int
     */
    int deleteByIds(@Param("ids") List<Long> ids);

    /**
     * 列表查询
     * @param dto 查询DTO
     * @return 字典项列表
     */
    List<SysDictColumnDO> selectList(@Param("dto") DictColumnQueryRequest dto);

    /**
     * 根据id查询
     * @param id id
     * @return 字典项
     */
    SysDictColumnDO selectById(@Param("id") Long id);

    List<SysDictColumnDO> selectByIds(@Param("ids")  List<Long> ids);

    /**
     * 根据字典表id查询字典项数量
     * @param tableIds 字典表id列表
     */
    List<Map<String, Object>> selectColumnNumByTableIds(@Param("tableIds") List<Long> tableIds);

    /**
     * 过滤存在已启用字典项的字典表分组id
     * @param groupIds 分组id列表
     */
    List<Map<String, Object>> filterEnableColumnByGroupIds(@Param("groupIds") List<Long> groupIds);

    /**
     * 过滤存在已启用字典项的字典表id
     * @param tableIds 字典表id列表
     */
    List<Map<String, Object>> filterEnableColumnByTableIds(@Param("tableIds") List<Long> tableIds);

    /**
     * 根据分组id删除字典项
     * @param groupIds 分组id列表
     * @return int
     */
    int deleteByGroupIds(@Param("groupIds") List<Long> groupIds);

    /**
     * 根据字典表id删除字典项
     * @param tableIds 字典表id列表
     * @return int
     */
    int deleteByTableIds(@Param("tableIds") List<Long> tableIds);

    /**
     * 根据字典项编码查询字典项
     * @param columnCode 字典项编码
     * @return 字典项
     */
    SysDictColumnDO selectOpenColumnByCode(@Param("columnCode") String columnCode);

    /**
     * 根据字典项编码查询字典项映射
     * @param columnCodes 字典项编码列表
     * @return 字典项列表
     */
    List<SysDictColumnDO> selectOpenColumnByCodes(@Param("columnCodes") List<String> columnCodes);

    /**
     * 根据字典项编码查询包含已删除的字典项
     * @param columnCodes 字典项编码列表
     * @return 字典项列表
     */
    List<SysDictColumnDO> selectColumnByCodesIncludeDeleted(@Param("columnCodes") List<String> columnCodes);

    /**
     * 根据字典表id查询
     * @param tableIds 字典表id列表
     * @return 字典项列表
     */
    List<SysDictColumnDO> selectOpenColumnListByTableIds(@Param("tableIds") List<Long> tableIds);

    /**
     * 获取字典项关联的字典项id
     * @param columnIds 字典项id列表
     * @return <字典项id, 字典项id>
     */
    List<Map<String, Object>> getRelationColumnIds(@Param("columnIds") List<Long> columnIds);
}