package org.xyzh.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.system.TbSysModule;

import java.util.List;

/**
 * @description 系统模块数据访问层
 * @filename ModuleMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-16
 */
@Mapper
public interface ModuleMapper extends BaseMapper<TbSysModule> {

    /**
     * @description 查询模块列表
     * @param filter 过滤条件
     * @return List<TbSysModule> 模块列表
     * @author yslg
     * @since 2025-10-16
     */
    List<TbSysModule> selectModules(TbSysModule filter);

    /**
     * @description 根据模块ID查询模块信息
     * @param moduleID 模块ID
     * @return TbSysModule 模块信息
     * @author yslg
     * @since 2025-10-16
     */
    TbSysModule selectByModuleID(@Param("moduleID") String moduleID);

    /**
     * @description 根据模块代码查询模块信息
     * @param code 模块代码
     * @return TbSysModule 模块信息
     * @author yslg
     * @since 2025-10-16
     */
    TbSysModule selectByCode(@Param("code") String code);

    /**
     * @description 查询启用的模块列表
     * @return List<TbSysModule> 启用的模块列表
     * @author yslg
     * @since 2025-10-16
     */
    List<TbSysModule> selectActiveModules();

    /**
     * @description 检查模块代码是否存在
     * @param code 模块代码
     * @param excludeID 排除的模块ID
     * @return int 存在的数量
     * @author yslg
     * @since 2025-10-16
     */
    int countByCode(@Param("code") String code, @Param("excludeID") String excludeID);

    /**
     * @description 插入模块
     * @param module 模块信息
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int insertModule(TbSysModule module);

    /**
     * @description 更新模块
     * @param module 模块信息
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int updateModule(TbSysModule module);

    /**
     * @description 删除模块
     * @param module 模块信息
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int deleteModule(TbSysModule module);

    /**
     * @description 批量插入模块
     * @param moduleList 模块列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int batchInsertModules(@Param("moduleList") List<TbSysModule> moduleList);

    /**
     * @description 批量删除模块
     * @param moduleIDs 模块ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int batchDeleteModules(@Param("moduleIDs") List<String> moduleIDs);

    /**
     * @description 分页查询模块列表
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbSysModule> 模块列表
     * @author yslg
     * @since 2025-10-16
     */
    List<TbSysModule> selectModulesPage(@Param("filter") TbSysModule filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计模块数量
     * @param filter 过滤条件
     * @return long 模块数量
     * @author yslg
     * @since 2025-10-16
     */
    long countModules(@Param("filter") TbSysModule filter);

    /**
     * @description 更新模块状态
     * @param moduleID 模块ID
     * @param status 状态
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int updateModuleStatus(@Param("moduleID") String moduleID, @Param("status") Integer status);

    /**
     * @description 更新模块排序
     * @param moduleID 模块ID
     * @param orderNum 排序号
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int updateModuleOrder(@Param("moduleID") String moduleID, @Param("orderNum") Integer orderNum);
}
