import { Repository } from 'typeorm';
import { ClsService } from 'nestjs-cls';
import { RoleRepository } from './repositories/role.repository';
import { RoleEntity } from '../../entities/role.entity';
import { RolePermissionEntity, ModuleName, AccessLevel } from '../../entities/role-permission.entity';
import { UserEntity } from '../../entities/user.entity';
import { RedisService } from '../../redis/redis.service';
import { CreateRoleDto, UpdateRoleDto, AssignPermissionsDto } from './dto';
import { RoleHierarchyService } from './role-hierarchy.service';
export declare class RoleService {
    private readonly roleRepo;
    private readonly rolePermRepo;
    private readonly userRepo;
    private readonly redisService;
    private readonly cls;
    private readonly hierarchyService;
    constructor(roleRepo: RoleRepository, rolePermRepo: Repository<RolePermissionEntity>, userRepo: Repository<UserEntity>, redisService: RedisService, cls: ClsService, hierarchyService: RoleHierarchyService);
    private preventSelfRoleAction;
    private getTenantId;
    private getUserId;
    findAll(query?: {
        page?: number;
        limit?: number;
        search?: string;
    }): Promise<{
        items: {
            id: string;
            name: string;
            description: string | null;
            is_system: boolean;
            view_all_bookings_queries: boolean;
            created_at: Date;
            updated_at: Date;
            permissions: {
                module: string;
                access_level: AccessLevel;
            }[];
        }[];
        meta: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
    findAllForLookup(): Promise<RoleEntity[]>;
    findById(id: string): Promise<{
        id: string;
        name: string;
        description: string | null;
        is_system: boolean;
        view_all_bookings_queries: boolean;
        created_at: Date;
        updated_at: Date;
        permissions: {
            module: string;
            access_level: AccessLevel;
        }[];
    }>;
    create(dto: CreateRoleDto): Promise<{
        id: string;
        message: string;
    }>;
    update(id: string, dto: UpdateRoleDto): Promise<{
        id: string;
        message: string;
    }>;
    remove(id: string): Promise<{
        message: string;
    }>;
    assignPermissions(roleId: string, dto: AssignPermissionsDto): Promise<{
        message: string;
    }>;
    getPermissionsMatrix(roleId: string): Promise<{
        module: ModuleName;
        access_level: string;
    }[]>;
    private invalidatePermissionCache;
    invalidateAllTenantPermissions(): Promise<void>;
    private toResponse;
}
