package com.ssyf.module.auth.service;

import com.ssyf.module.auth.domain.bo.UserRoleRelationBo;
import com.ssyf.module.auth.domain.entity.Role;
import com.ssyf.module.auth.domain.query.RoleQuery;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
* com.ssyf.module.auth.entity.Role模型业务接口
* @author: auth
* @date: 2022-12-12
*/
public interface RoleService {
    /**
     * 创建角色
     * @param query
     * @return
     */
    Role addOne(RoleQuery query);

    /**
     * 删除指定角色
     * @param uid
     */
    void removeByUid(String uid);

    /**
     * 更新指定角色
     * @param uid
     * @param query
     */
    void updateByUid(String uid, RoleQuery query);

    /**
     * 获取指定角色
     * @param uid
     * @return
     */
    Role getOneByUid(String uid);

    /**
     * 分页获取数据
     * @param query
     * @return
     */
    PageInfo<Role> getPage(RoleQuery query);

    /**
     * 获取数据
     * @param query
     * @return
     */
    List<Role> getList(RoleQuery query);

    /**
     * 获取指定用关联的数据
     * @param userUid
     * @param query
     * @return
     */
    List<Role> getRelationListByUserUid(String userUid, RoleQuery query);

    /**
     * 获取指定数据
     * @param roleUids
     * @param query
     * @return
     */
    List<Role> getListInUids(List<String> roleUids, RoleQuery query);

    /**
     * 为指定角色分配菜单权限，并删除就有关联
     * @param roleUid
     * @param menuPermissionUids
     */
    void assignMenuPermissionAndRemoveOld(String roleUid, List<String> menuPermissionUids);

    /**
     * 获取用户可见的数据；
     * 使用场景：展示用户可分配给其他人的数据
     * @param userUid
     * @param query
     * @return
     */
    List<Role>  getVisibleByUserUid(String userUid, RoleQuery query);

    /**
     * 重置用户角色的分享关联数据
     * @param userUid
     * @param roleUids
     */
    void resetUserRelationShare(String userUid, List<String> roleUids);

    /**
     * 获取用户可见的角色数据
     * @param userUid
     * @param query
     * @return
     */
    List<String> getVisibleNamesByUserUid(String userUid, RoleQuery query);

    List<UserRoleRelationBo> getBoByUserUids(List<String> userUids);

    boolean isSuperAdmin();

    void clearSuperAdminCacheForUsers(List<String> userUids);

    Role getOneByName(String name);
}