import { DataSource } from 'typeorm';
import { ProgramAccessRepository } from './program-access.repository';
import { AddProgramAccessUsersDto } from './dto/add-program-access-users.dto';
import { UpdateProgramAccessUserDto } from './dto/update-program-access-user.dto';
import { QueryProgramAccessUsersDto } from './dto/query-program-access-users.dto';
import { BulkUpdateProgramAccessDto } from './dto/bulk-update-program-access.dto';
import { BulkRemoveProgramAccessDto } from './dto/bulk-remove-program-access.dto';
import { ProgramAccessUserResponseDto, ProgramAccessUsersListResponseDto } from './dto/program-access-user-response.dto';
import { AppLoggerService } from 'src/common/services/logger.service';
export declare class ProgramAccessService {
    private readonly programAccessRepository;
    private readonly dataSource;
    private readonly logger;
    constructor(programAccessRepository: ProgramAccessRepository, dataSource: DataSource, logger: AppLoggerService);
    addProgramAccessUsers(programId: number, dto: AddProgramAccessUsersDto, createdBy: number): Promise<ProgramAccessUserResponseDto[]>;
    updateProgramAccessUser(programId: number, userId: number, dto: UpdateProgramAccessUserDto, updatedBy: number): Promise<ProgramAccessUserResponseDto>;
    removeProgramAccessUser(programId: number, userId: number, deletedBy: number): Promise<{
        success: boolean;
        message: string;
    }>;
    getProgramAccessUsers(programId: number, query: QueryProgramAccessUsersDto): Promise<ProgramAccessUsersListResponseDto>;
    hasUserAccessToProgram(programId: number, userId: number): Promise<boolean>;
    canUserRegisterForProgram(programId: number, userId: number): Promise<boolean>;
    getUserAccessMapping(programId: number, userId: number): Promise<ProgramAccessUserResponseDto | null>;
    bulkCheckAccess(checks: Array<{
        programId: number;
        userId: number;
    }>): Promise<Map<string, boolean>>;
    bulkUpdateProgramAccessUsers(programId: number, dto: BulkUpdateProgramAccessDto, updatedBy: number): Promise<{
        updated: number;
        failed: number;
        errors: string[];
    }>;
    bulkRemoveProgramAccessUsers(programId: number, dto: BulkRemoveProgramAccessDto, deletedBy: number): Promise<{
        removed: number;
        failed: number;
        registrationsCascaded: number;
        errors: string[];
    }>;
    private cascadeDeleteRegistrations;
    isAdminRole(userRoles: string[]): boolean;
    verifyViewAccess(programId: number, userId: number, userRoles: string[]): Promise<boolean>;
    verifyRegistrationAccess(programId: number, userId: number, userRoles: string[]): Promise<boolean>;
    private mapToResponseDto;
    getProgramAccessUserIds(programId: number): Promise<number[]>;
}
