import { Repository, EntityManager } from 'typeorm';
import { ProgramAccessUserMap } from 'src/common/entities/program-access-user-map.entity';
import { Program, User } from 'src/common/entities';
import { AppLoggerService } from 'src/common/services/logger.service';
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 { AccessStateEnum } from 'src/common/enum/access-state.enum';
import { AccessScopeEnum } from 'src/common/enum/access-scope.enum';
export declare class ProgramAccessRepository {
    private readonly accessMapRepo;
    private readonly programRepo;
    private readonly userRepo;
    private readonly logger;
    constructor(accessMapRepo: Repository<ProgramAccessUserMap>, programRepo: Repository<Program>, userRepo: Repository<User>, logger: AppLoggerService);
    addProgramAccessUsers(programId: number, dto: AddProgramAccessUsersDto, createdBy: number, manager?: EntityManager): Promise<ProgramAccessUserMap[]>;
    updateProgramAccessUser(programId: number, userId: number, dto: UpdateProgramAccessUserDto, updatedBy: number, manager?: EntityManager): Promise<ProgramAccessUserMap>;
    removeProgramAccessUser(programId: number, userId: number, deletedBy: number, manager?: EntityManager): Promise<void>;
    getProgramAccessUsers(programId: number, query: QueryProgramAccessUsersDto): Promise<{
        data: ProgramAccessUserMap[];
        total: number;
    }>;
    hasUserAccessToProgram(programId: number, userId: number, manager?: EntityManager): Promise<boolean>;
    canUserRegisterForProgram(programId: number, userId: number, manager?: EntityManager): Promise<boolean>;
    getUserAccessMapping(programId: number, userId: number, manager?: EntityManager): Promise<ProgramAccessUserMap | null>;
    bulkCheckAccess(checks: Array<{
        programId: number;
        userId: number;
    }>, manager?: EntityManager): Promise<Map<string, boolean>>;
    bulkUpdateProgramAccessUsers(programId: number, userIds: number[], updateData: {
        accessScope?: AccessScopeEnum;
        state?: AccessStateEnum;
        effectiveFrom?: Date;
        effectiveTill?: Date;
        reason?: string;
        meta?: Record<string, any>;
    }, updatedBy: number, manager?: EntityManager): Promise<{
        updated: number;
        failed: number;
        errors: string[];
    }>;
    bulkRemoveProgramAccessUsers(programId: number, userIds: number[], reason: string | undefined, deletedBy: number, manager?: EntityManager): Promise<{
        removed: number;
        failed: number;
        errors: string[];
    }>;
    getProgramAccessUserIds(programId: number, manager?: EntityManager): Promise<number[]>;
}
