package com.cool.store.mapper.dict;

import com.cool.store.entity.dict.SysDictTableDO;
import com.cool.store.request.dict.DictTableQueryRequest;
import org.apache.ibatis.annotations.Param;

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

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

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

    /**
     * 查询重复的字典表
     *
     * @param id        id
     * @param tableCode 字典表code
     * @return 字典表
     */
    SysDictTableDO selectExistTable(@Param("id") Long id,
                                    @Param("tableCode") String tableCode);

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

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

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

    /**
     * 根据id查询
     *
     * @param ids id列表
     * @return 字典表列表
     */
    List<SysDictTableDO> selectByIds(@Param("ids") List<Long> ids);

    /**
     * 根据分组id查询
     *
     * @param groupIds   分组id列表
     * @param openStatus 启用状态
     * @return 字典表列表
     */
    List<SysDictTableDO> selectByGroupIds(@Param("groupIds") List<Long> groupIds,
                                          @Param("openStatus") Integer openStatus);

    /**
     * 根据分组id查询已启用的字典表
     *
     * @param groupIds 分组id列表
     */
    List<Map<String, Object>> filterEnableTableByGroupIds(@Param("groupIds") List<Long> groupIds);

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

    /**
     * 根据字典表编码查询
     *
     * @param tableCode 字典表编码
     * @return 字典表
     */
    SysDictTableDO selectByTableCode(@Param("tableCode") String tableCode);

    /**
     * 根据字典表编码查询启用状态的字典表
     *
     * @param tableCodes 字典表编码
     * @return 字典表列表
     */
    List<SysDictTableDO> selectOpenTableListByTableCodes(@Param("tableCodes") List<String> tableCodes);
}