package org.xyzh.api.system.service;

import org.xyzh.api.system.vo.PermissionVO;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.sys.TbSysModuleDTO;
import org.xyzh.common.dto.sys.TbSysPermissionDTO;
import org.xyzh.common.core.page.PageRequest;

/**
 * @description    模块权限服务接口
 * @filename    ModulePermissionService.java
 * @author    yslg
 * @copyright yslg
 * @since 2025-11-05
 */
public interface ModulePermissionService {
    
    // ================= 模块管理 =================
    /**
     * @description    插入模块
     * @param    moduleDTO    模块DTO
     * @return    ResultDomain<TbSysModuleDTO>    插入结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysModuleDTO> insertModule(TbSysModuleDTO moduleDTO);

    /**
     * @description    更新模块
     * @param    moduleDTO    模块DTO
     * @return    ResultDomain<TbSysModuleDTO>    更新结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysModuleDTO> updateModule(TbSysModuleDTO moduleDTO);

    /**
     * @description    根据ID删除模块
     * @param    moduleDTO    模块DTO
     * @return    ResultDomain<Boolean>    删除结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<Boolean> deleteModule(TbSysModuleDTO moduleDTO);

    /**
     * @description    获取模块分页数据
     * @param    
     * @return    返回值描述
     * @author    yslg
     * @since 2025-11-10
     */
    ResultDomain<PermissionVO> getModulePage(PageRequest<PermissionVO> pageRequest);

    /**
     * @description    查询模块列表
     * @param    filter    模块VO
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getModuleList(PermissionVO filter);

    // ================= 权限管理 =================
    /**
     * @description    插入权限
     * @param    permissionDTO    权限DTO
     * @return    ResultDomain<TbSysPermissionDTO>    插入结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysPermissionDTO> insertPermission(TbSysPermissionDTO permissionDTO);

    /**
     * @description    更新权限
     * @param    permissionDTO    权限DTO
     * @return    ResultDomain<TbSysPermissionDTO>    更新结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysPermissionDTO> updatePermission(TbSysPermissionDTO permissionDTO);

    /**
     * @description    根据ID删除权限
     * @param    permissionDTO    权限DTO
     * @return    ResultDomain<Boolean>    删除结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<Boolean> deletePermission(TbSysPermissionDTO permissionDTO);

    /**
     * @description    根据模块ID获取权限列表
     * @param    moduleId    模块ID
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getPermissionListByModuleId(String moduleId);


    // ================= 模块权限查询 =================
    /**
     * @description    根据条件查询模块权限
     * @param    filter    模块权限VO
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getModulePermission(PermissionVO filter);

    /**
     * @description    根据条件查询模块权限列表
     * @param    filter    模块权限VO
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getModulePermissionList(PermissionVO filter);

    /**
     * @description    根据条件查询模块权限分页列表
     * @param    pageRequest    模块权限VO
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getModulePermissionPage(PageRequest<PermissionVO> pageRequest);

    /**
     * @description    根据角色ID获取模块权限列表
     * @param    roleId    角色ID
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getModulePermissionListByRoleId(String roleId);

    /**
     * @description    根据用户ID获取用户的所有权限
     * @param    userId    用户ID
     * @return    ResultDomain<PermissionVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<PermissionVO> getUserPermissions(String userId);
}
