package com.ssyf.module.auth.service;

import com.ssyf.module.auth.domain.entity.MenuPermission;
import com.ssyf.module.auth.domain.entity.UserPermissionRelation;

import java.util.Arrays;
import java.util.List;

/**
 * 用户权限关联
 * @author huwei
 * @date 2023/12/1 15:30
 */
public interface UserPermissionRelationService {

    /**
     * 删除指定权限的关联数据
     * @param permissionUid
     */
    default void removeByPermissionId(String permissionUid){
        removeByPermissionIds(Arrays.asList(permissionUid));
    }

    /**
     * 删除指定权限的关联数据
     * @param permissionUids
     */
    void removeByPermissionIds(List<String> permissionUids);

    /**
     * 删除指定角色的关联数据
     * @param roleUid
     */
    default void removeByRoleUid(String roleUid){
        removeByRoleUids(Arrays.asList(roleUid));
    }

    /**
     * 删除指定角色的关联数据
     * @param roleUids
     */
    void removeByRoleUids(List<String> roleUids);

    /**
     * 删除指定用户的关联数据
     * @param userUid
     */
    default void removeByUserUid(String userUid){
        removeByUserUids(Arrays.asList(userUid));
    }

    /**
     * 删除指定用户的关联数据
     * @param userUids
     */
    void removeByUserUids(List<String> userUids);

    /**
     * 获取指定用户的关联数据
     * @param userUid
     * @return
     */
    default List<UserPermissionRelation> getListByUserUid(String userUid){
        return getListByUserUids(Arrays.asList(userUid));
    }

    /**
     * 用户指定用户的关联数据
     * @param userUids
     * @return
     */
    List<UserPermissionRelation> getListByUserUids(List<String> userUids);

    /**
     * 为指定用户分配关联数据，并删除指定数据
     * @param roleUid
     * @param userUids
     * @param menuPermissionList
     */
    void assignOrRemoveOldByRoleUid(String roleUid, List<String> userUids, List<MenuPermission> menuPermissionList);

    /**
     * 为指定用户分配关联数据，并删除指定数据
     * @param userUid
     * @param roleUids
     * @param menuPermissionList
     */
    void assignOrRemoveOldByUserUid(String userUid, List<String> roleUids, List<MenuPermission> menuPermissionList);

    /**
     * 更新权限
     * @param oldPermission
     * @param permission
     */
    void updateByPermission(String oldPermission, String permission);
}
