package org.xyzh.api.system.service;

import org.xyzh.api.system.vo.PermissionVO;
import org.xyzh.api.system.vo.UserDeptRoleVO;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageRequest;
import org.xyzh.common.dto.sys.TbSysDeptDTO;
import org.xyzh.common.dto.sys.TbSysDeptRoleDTO;
import org.xyzh.common.dto.sys.TbSysRoleDTO;

/**
 * @description    部门角色服务接口
 * @filename    DeptRoleService.java
 * @author    yslg
 * @copyright yslg
 * @since 2025-11-05
 */
public interface DeptRoleService {
    
    // ================= 部门管理 =================
    /**
     * @description    插入部门
     * @param    deptDTO    部门DTO
     * @return    ResultDomain<TbSysDeptDTO>    插入结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysDeptDTO> insertDept(TbSysDeptDTO deptDTO);

    /**
     * @description    更新部门
     * @param    deptDTO    部门DTO
     * @return    ResultDomain<TbSysDeptDTO>    更新结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysDeptDTO> updateDept(TbSysDeptDTO deptDTO);

    /**
     * @description    根据ID删除部门
     * @param    deptDTO    部门DTO
     * @return    ResultDomain<Boolean>    删除结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<Boolean> deleteDept(TbSysDeptDTO deptDTO);

    /**
     * @description    根据ID查询部门
     * @param    filter    部门VO
     * @return    ResultDomain<UserDeptRoleVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<UserDeptRoleVO> getDept(UserDeptRoleVO filter);

    /**
     * @description    根据条件查询部门列表
     * @param    filter    部门VO
     * @return    ResultDomain<UserDeptRoleVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<UserDeptRoleVO> getDeptList(UserDeptRoleVO filter);

    /**
     * @description    根据条件查询部门分页列表
     * @param    pageRequest    部门VO
     * @return    ResultDomain<UserDeptRoleVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<UserDeptRoleVO> getDeptPage(PageRequest<UserDeptRoleVO> pageRequest);

    /**
     * @description    获取部门树
     * @param    filter    部门VO
     * @return    ResultDomain<UserDeptRoleVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<UserDeptRoleVO> getDeptTree(UserDeptRoleVO filter);

    // ================= 角色管理 =================
    /**
     * @description    插入角色
     * @param    roleDTO    角色DTO
     * @return    ResultDomain<TbSysRoleDTO>    插入结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysRoleDTO> insertRole(TbSysRoleDTO roleDTO);

    /**
     * @description    更新角色
     * @param    roleDTO    角色DTO
     * @return    ResultDomain<TbSysRoleDTO>    更新结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysRoleDTO> updateRole(TbSysRoleDTO roleDTO);

    /**
     * @description    根据ID删除角色
     * @param    roleDTO    角色DTO
     * @return    ResultDomain<Boolean>    删除结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<Boolean> deleteRole(TbSysRoleDTO roleDTO);

    /**
     * @description    根据ID查询角色
     * @param    filter    角色VO
     * @return    ResultDomain<UserDeptRoleVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<UserDeptRoleVO> getRole(UserDeptRoleVO filter);

    /**
     * @description    根据条件查询角色列表
     * @param    filter    角色VO
     * @return    ResultDomain<UserDeptRoleVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<UserDeptRoleVO> getRoleList(UserDeptRoleVO filter);

    /**
     * @description    根据条件查询角色分页列表
     * @param    pageRequest    角色VO
     * @return    ResultDomain<UserDeptRoleVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<UserDeptRoleVO> getRolePage(PageRequest<UserDeptRoleVO> pageRequest);

    /**
     * @description    根据部门ID获取角色列表
     * @param    deptId    部门ID
     * @return    ResultDomain<UserDeptRoleVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<UserDeptRoleVO> getRoleListByDeptId(String deptId);

    /**
     * @description    根据用户ID获取角色列表
     * @param    userId    用户ID
     * @return    ResultDomain<UserDeptRoleVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<UserDeptRoleVO> getRoleListByUserId(String userId);


    // ==================== 角色权限关联 ================================
    /**
     * @description    设置角色的权限
     * @param    permissionVO    权限VO roleId对应多个permissionId
     * @return    返回值描述
     * @author    yslg
     * @since 2025-11-10
     */
    ResultDomain<PermissionVO> setRolePermission(PermissionVO permissionVO);

    /**
     * @description    获取角色的权限列表
     * @param    permissionVO    权限VO
     * @return    返回值描述
     * @author    yslg
     * @since 2025-11-10
     */
    ResultDomain<PermissionVO> getRolePermissionList(PermissionVO permissionVO);
}
