import { Doctor, Slot, AddressItem } from "../../services/AppointmentService"; export interface Patient { id: number; firstName: string; lastName: string; email: string; countryCode: string; phoneNumber: string; dob: string; age: number; gender: string; bloodGroup: string; mrn: string; address: { id: number; completeAddress: string; addressLine1: string; addressLine2: string; city: string; state: string; country: string; zipcode: string; landmark: string; phoneNumber: string; latitude: number; longitude: number; }; } export interface SessionPackDoctor { id: number; fullName: string; profilePicUrl: string | null; } export interface SessionPackResponse { id: number; workspaceId: number; packageName: string; description: string; totalSessions: number; packagePrice: number; discount: number; discountedPrice: number; discountType: "PERCENTAGE" | "FLAT"; validityDays: number; allowedConsultationModes: ("ONLINE" | "OFFLINE")[]; doctorIds: number[]; allowFamilyBooking: boolean; maxFamilyMembers: number; isActive: boolean; allowedDoctors: SessionPackDoctor[]; } export interface ActiveSessionPack { id: number; packageName: string; totalSessions: number; remainingSessions: number; expiryDate: string; purchaseDate?: string; doctorId?: number; doctorName?: string; allowedConsultationModes?: ("ONLINE" | "OFFLINE")[]; } export interface SessionPacksDetails { associatedPatients: Patient[]; activeSessionPackResponses: ActiveSessionPack[]; allSessionPackResponses: SessionPackResponse[]; } export interface SessionPack { id: number; name: string; description?: string; totalSessions: number; remainingSessions: number; price?: number; validityDays?: number; applicableOnline?: boolean; applicableOffline?: boolean; expiryDate: string; purchaseDate?: string; doctorId?: number; doctorName?: string; } export interface AvailablePackage { id: number; name: string; description?: string; totalSessions: number; sessions?: number; price: number; discountedPrice?: number; discount?: number; discountType?: "PERCENTAGE" | "FLAT"; currency?: string; validityDays: number; applicableOnline?: boolean; applicableOffline?: boolean; allowedConsultationModes?: ("ONLINE" | "OFFLINE")[]; allowedDoctors?: SessionPackDoctor[]; doctorIds?: number[]; } export type BookingOptionType = "session-pack" | "new-appointment" | "explore-packages" | null; export interface AppointmentState { step: number; loading: boolean; error: string | null; workspaceId: number | null; addresses: AddressItem[]; addressDoctorsMap: Record; selectedAddress: number | null; selectedDoctor: number | null; selectedDate: Date; slots: Slot[]; selectedSlot: Slot | null; consultationMode: "ONLINE" | "OFFLINE"; consultationCharge: string; patientName: string; patientAge: string; patientEmail: string; patientGender: string; bloodGroup: string; patientDob: string; patientAddress: string; patientCity: string; patientState: string; patientCountry: string; patientZipcode: string; patientLandmark: string; countryCode: string; patientPhone: string; otpCode: string; otpSent: boolean; otpVerified: boolean; otpSending: boolean; otpVerifying: boolean; verifiedPatients: Patient[]; selectedPatient: Patient | null; useExistingPatient: boolean; userSessionPacks: SessionPack[]; availablePackages: AvailablePackage[]; selectedSessionPack: SessionPack | null; selectedNewPackage: AvailablePackage | null; bookingOptionType: BookingOptionType; showPackageExplorer: boolean; packagesLoading: boolean; arePackagesConfigured: boolean; bookingType: "PACKAGE_PURCHASE" | "ONE_TIME_APPOINTMENT" | "USE_ACTIVE_PACKAGE"; paymentMode: "CASH" | "CARD" | string; packageConfigId?: number; patientPackageId?: number; packageAmount?: number; } export type AppointmentAction = { type: "SET_STEP"; payload: number; } | { type: "SET_LOADING"; payload: boolean; } | { type: "SET_ERROR"; payload: string | null; } | { type: "SET_WORKSPACE"; payload: { id: number; addresses: AddressItem[]; }; } | { type: "SET_SELECTED_ADDRESS"; payload: number | null; } | { type: "SET_SELECTED_DOCTOR"; payload: number | null; } | { type: "SET_SELECTED_DATE"; payload: Date; } | { type: "SET_SLOTS"; payload: Slot[]; } | { type: "SET_SELECTED_SLOT"; payload: Slot | null; } | { type: "SET_CONSULTATION_MODE"; payload: "ONLINE" | "OFFLINE"; } | { type: "SET_CONSULTATION_CHARGE"; payload: string; } | { type: "SET_PATIENT_NAME"; payload: string; } | { type: "SET_PATIENT_AGE"; payload: string; } | { type: "SET_PATIENT_EMAIL"; payload: string; } | { type: "SET_PATIENT_GENDER"; payload: string; } | { type: "SET_BLOOD_GROUP"; payload: string; } | { type: "SET_PATIENT_DOB"; payload: string; } | { type: "SET_PATIENT_ADDRESS"; payload: string; } | { type: "SET_PATIENT_CITY"; payload: string; } | { type: "SET_PATIENT_STATE"; payload: string; } | { type: "SET_PATIENT_COUNTRY"; payload: string; } | { type: "SET_PATIENT_ZIPCODE"; payload: string; } | { type: "SET_PATIENT_LANDMARK"; payload: string; } | { type: "SET_COUNTRY_CODE"; payload: string; } | { type: "SET_PATIENT_PHONE"; payload: string; } | { type: "SET_OTP_CODE"; payload: string; } | { type: "SET_OTP_SENT"; payload: boolean; } | { type: "SET_OTP_VERIFIED"; payload: boolean; } | { type: "SET_OTP_SENDING"; payload: boolean; } | { type: "SET_OTP_VERIFYING"; payload: boolean; } | { type: "SET_VERIFIED_PATIENTS"; payload: Patient[]; } | { type: "SET_SELECTED_PATIENT"; payload: Patient | null; } | { type: "SET_USE_EXISTING_PATIENT"; payload: boolean; } | { type: "SET_USER_SESSION_PACKS"; payload: SessionPack[]; } | { type: "SET_AVAILABLE_PACKAGES"; payload: AvailablePackage[]; } | { type: "SET_SELECTED_SESSION_PACK"; payload: SessionPack | null; } | { type: "SET_SELECTED_NEW_PACKAGE"; payload: AvailablePackage | null; } | { type: "SET_BOOKING_OPTION_TYPE"; payload: BookingOptionType; } | { type: "SET_SHOW_PACKAGE_EXPLORER"; payload: boolean; } | { type: "SET_PACKAGES_LOADING"; payload: boolean; } | { type: "SET_BOOKING_TYPE"; payload: "PACKAGE_PURCHASE" | "ONE_TIME_APPOINTMENT" | "USE_ACTIVE_PACKAGE"; } | { type: "SET_PAYMENT_MODE"; payload: "CASH" | "CARD" | string; } | { type: "SET_PACKAGE_CONFIG_ID"; payload: number | undefined; } | { type: "SET_PATIENT_PACKAGE_ID"; payload: number | undefined; } | { type: "SET_PACKAGE_AMOUNT"; payload: number | undefined; } | { type: "RESET_FORM"; }; export interface AppointmentCalenderProps { onError?: (err: Error) => void; } export declare const INITIAL_STATE: AppointmentState;