package com.qqchen.deploy.backend.system.service;

import com.qqchen.deploy.backend.framework.service.IBaseService;
import com.qqchen.deploy.backend.system.entity.Role;
import com.qqchen.deploy.backend.system.model.RoleDTO;
import com.qqchen.deploy.backend.system.model.PermissionDTO;
import com.qqchen.deploy.backend.system.model.query.RoleQuery;
import com.qqchen.deploy.backend.system.model.response.RoleMenusAndPermissionsResponse;

import java.util.List;

public interface IRoleService extends IBaseService<Role, RoleDTO, RoleQuery, Long> {

    /**
     * 验证角色编码是否存在
     */
    void validateCode(String code);

    /**
     * 验证角色名称是否存在
     */
    void validateName(String name);

    /**
     * 获取用户的所有角色ID
     */
    List<Long> getUserRoleIds(Long userId);

    /**
     * 分配标签
     */
    void assignTags(Long roleId, List<Long> tagIds);

    /**
     * 获取角色的菜单和功能权限（两个维度）
     *
     * @param roleId 角色ID
     * @return 包含菜单ID和权限点ID的响应对象
     */
    RoleMenusAndPermissionsResponse getRoleMenusAndPermissions(Long roleId);

    /**
     * 分配菜单和功能权限给角色（两个维度）
     *
     * @param roleId        角色ID
     * @param menuIds       菜单ID列表（后端会自动补全父菜单）
     * @param permissionIds 功能权限点ID列表
     */
    void assignMenusAndPermissions(Long roleId, List<Long> menuIds, List<Long> permissionIds);
}