import { PaginatedResponseDto } from 'common/utils/paginated-response.dto';
import { CreateRoleDto } from '../dto/create-role.dto';
import { RoleResponseDto } from '../dto/role-response.dto';
import { UpdateRoleDto } from '../dto/update-role.dto';
import { UserResponseDto } from 'modules/user/dto/user-response.dto';
import { PermissionStateDto } from '../dto/permission-state.dto';
import { UserPermissionOverrideDto } from '../dto/user-permission-override.dto';
import { UserPermissionOverrideEntity } from '../entities/user-permission-override.entity';
import { EffectivePermissionDto } from '../dto/effective-permission.dto';
import { PermissionWithStateDto, SubPermissionWithStateDto } from 'modules/role-permission/permissions/dto/permission-state.dto';
export declare abstract class BaseRoleService {
    abstract createRole(createRoleDto: CreateRoleDto): Promise<RoleResponseDto>;
    abstract updateRole(roleId: string, updateRoleDto: UpdateRoleDto): Promise<RoleResponseDto>;
    abstract deleteRole(roleId: string): Promise<void>;
    abstract findAllRoles(page: number, limit: number, clientId?: string): Promise<PaginatedResponseDto<RoleResponseDto>>;
    abstract findRoleById(roleId: string): Promise<RoleResponseDto>;
    abstract findRoleByName(roleName: string, clientId?: string): Promise<RoleResponseDto>;
    abstract assignUserToRoleByEmail(email: string, roleId: string, clientId?: string): Promise<void>;
    abstract removeUserFromRole(userId: number, roleId: string): Promise<void>;
    abstract revokeUserAllRoles(userId: number): Promise<void>;
    abstract removeUserRolesFromClient(userId: number, clientId: string): Promise<void>;
    abstract setRolePermissionState(roleId: string, permissionId: string, state: PermissionState): Promise<void>;
    abstract setRoleSubPermissionState(roleId: string, subPermissionId: string, state: PermissionState): Promise<void>;
    abstract bulkSetRolePermissionStates(roleId: string, permissions: PermissionStateDto[], subPermissions: PermissionStateDto[]): Promise<RoleResponseDto>;
    abstract setUserPermissionOverride(override: UserPermissionOverrideDto): Promise<void>;
    abstract removeUserPermissionOverride(userId: number, permissionId?: string, subPermissionId?: string, clientId?: string): Promise<void>;
    abstract getUserPermissionOverrides(userId: number, clientId?: string): Promise<UserPermissionOverrideEntity[]>;
    abstract checkUserPermission(userId: number, permissionName: string, clientId?: string): Promise<boolean>;
    abstract checkUserSubPermission(userId: number, subPermissionName: string, clientId?: string): Promise<boolean>;
    abstract getUserEffectivePermissions(userId: number, clientId?: string): Promise<EffectivePermissionDto[]>;
    abstract getPermissionsByRoleId(roleId: string): Promise<PermissionWithStateDto[]>;
    abstract getSubPermissionsByRoleId(roleId: string): Promise<SubPermissionWithStateDto[]>;
    abstract getPermissionsByUserId(userId: number, clientId?: string): Promise<EffectivePermissionDto[]>;
    abstract getSubPermissionsByUserId(userId: number, clientId?: string): Promise<EffectivePermissionDto[]>;
    abstract getPermissionsByRoleName(roleName: string, clientId?: string): Promise<PermissionWithStateDto[]>;
    abstract getRolesByUserId(userId: number): Promise<RoleResponseDto[]>;
    abstract getRolesByClientId(clientId: string): Promise<RoleResponseDto[]>;
    abstract getUsersByRoleId(roleId: string): Promise<UserResponseDto[]>;
    abstract getRolesByUserEmail(email: string, clientId?: string): Promise<RoleResponseDto[]>;
    abstract duplicateRole(roleId: string, newName: string): Promise<RoleResponseDto>;
    abstract getRoleHierarchy(clientId?: string): Promise<RoleResponseDto[]>;
}
