package org.xyzh.api.system.role;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.permission.TbSysPermission;
import org.xyzh.common.dto.role.TbSysRole;
import org.xyzh.common.dto.role.TbSysRolePermission;
import org.xyzh.common.vo.DeptRoleVO;


/**
 * @description    RoleRemoteService.java文件描述 角色远程服务接口
 * @filename    RoleRemoteService.java
 * @author    yslg
 * @copyright xyzh
 * @since 2025-09-26
 */
public interface RoleService {

    /**
     * @description    获取所有角色
     * @return    ResultDomain<TbSysRole> 角色列表
     * @author    yslg
     * @since 2025-09-28
     */
    ResultDomain<TbSysRole> getAllRoles();

    /**
     * @description    根据过滤条件获取角色列表
     * @param    filter 过滤条件
     * @return    ResultDomain<TbSysRole> 角色列表
     * @author    yslg
     * @since 2025-10-09
     */
    ResultDomain<TbSysRole> getRoleList(TbSysRole filter);

    /**
     * @description    创建角色
     * @param    role 角色对象
     * @return    ResultDomain<TbSysRole> 创建结果
     * @author    yslg
     * @since 2025-09-28
     */
    ResultDomain<TbSysRole> createRole(TbSysRole role);

    /**
     * @description    更新角色
     * @param    role 角色对象
     * @return    ResultDomain<TbSysRole> 更新结果
     * @author    yslg
     * @since 2025-09-28
     */
    ResultDomain<TbSysRole> updateRole(TbSysRole role);

    /**
     * @description    删除角色
     * @param    roleId 角色ID
     * @return    ResultDomain<TbSysRole> 删除结果
     * @author    yslg
     * @since 2025-09-28
     */
    ResultDomain<TbSysRole> deleteRole(TbSysRole role);

    /**
     * @description    根据角色ID查询角色
     * @param    roleId 角色ID
     * @return    ResultDomain<TbSysRole> 角色信息
     * @author    yslg
     * @since 2025-09-28
     */
    ResultDomain<TbSysRole> getRoleById(String roleId);

    /**
     * @description    根据用户ID查询部门角色列表
     * @param    userId 用户ID
     * @return    ResultDomain<DeptRoleVO> 角色列表
     * @author    yslg
     * @since 2025-09-28
     */
    ResultDomain<DeptRoleVO> getDeptRolesByUserId(String userId);

    /**
     * @description    检查角色名称是否存在
     * @param    roleName 角色名称
     * @param    excludeId 排除的角色ID（用于更新时排除自身）
     * @return    ResultDomain<Boolean> 是否存在
     * @author    yslg
     * @since 2025-09-28
     */
    ResultDomain<Boolean> checkRoleNameExists(String roleName, String excludeId);

    /**
     * @description    修改角色状态
     * @param    roleId 角色ID
     * @param    status 新状态
     * @return    ResultDomain<TbSysRole> 修改结果
     * @author    yslg
     * @since 2025-09-28
     */
    ResultDomain<TbSysRole> changeRoleStatus(String roleId, Integer status);

    /**
     * @description    获取角色权限
     * @param    roleId 角色ID
     * @return    ResultDomain<TbSysRolePermission> 角色权限信息
     * @author    yslg
     * @since 2025-10-09
     */
    ResultDomain<TbSysPermission> getRolePermission(String roleId);

}
