import { Program, ProgramType } from '../entities';
import { RegistrationStatusEnum } from '../enum/registration-status.enum';
export interface RegistrationFlowConfig {
    requiresPayment: boolean;
    involvesTravel: boolean;
    requiresApproval: boolean;
    shouldSendTerms: boolean;
    parentalConsentEnabled: boolean;
    parentalConsentFormAsAttachment: boolean;
    parentalConsentUploadDeadline: Date | null;
    parentalConsentFormContent: string | null;
    programId?: number;
    programTypeKey?: string;
}
export interface FlowDecision {
    shouldAutoApprove: boolean;
    shouldCheckSeatsNow: boolean;
    shouldCheckSeatsAfterApproval: boolean;
    initialStatus: string;
    autoApprovalReason?: string;
}
export declare function getRegistrationFlowConfig(program: Program, programType?: ProgramType, session?: {
    shouldSendTerms?: boolean;
    parentalConsentEnabled?: boolean;
    parentalConsentFormAsAttachment?: boolean;
    parentalConsentUploadDeadline?: Date;
    parentalConsentFormContent?: string;
}): RegistrationFlowConfig;
export declare function determineFlowDecisions(config: RegistrationFlowConfig): FlowDecision;
export declare function determineStatusAfterPayment(config: RegistrationFlowConfig, registration: any): string;
export declare function determineStatusAfterWaitlistRelease(config: RegistrationFlowConfig, registration: any): RegistrationStatusEnum;
export declare function determineStatusAfterTravel(config: RegistrationFlowConfig, registration: any): string;
export declare function determineStatusAfterApproval(config: RegistrationFlowConfig, registration: any): string;
export declare function canCompleteRegistration(config: RegistrationFlowConfig, paymentCompleted: boolean, travelCompleted: boolean, approvalCompleted: boolean): boolean;
export declare function canCompleteRegistrationFromDetails(config: RegistrationFlowConfig, registration: any): boolean;
export declare function determineRegistrationStatus(config: RegistrationFlowConfig, registration: any): string;
export declare function isStatusTransitionAllowed(fromStatus: string, toStatus: string): {
    isValid: boolean;
    reason?: string;
};
export declare function getAllowedTargetStatuses(currentStatus: string): string[];
