import { ClientProxy } from '@nestjs/microservices';
import { OTPNotificationChannel } from './notification.enum';
import { AccountFreezeEmailData, AccountStatementEmailData, AccountUnfreezeEmailData, AjoCancellationEmailData, AjoContributionEmailData, AjoInviteEmailData, AjoMembershipUpdateEmailData, ContactMessageEmailData, CreditTransactionMailData, CustomMailSendOptions, DebitTransactionMailData, ElectricityEmailData, InvestmentCancellationEmailData, LoanApprovedEmailData, LoanRepaymentConfirmationEmailData, LoanRepaymentFailedEmailData, NewLoanApplicationEmailData, OTPMailData, PasswordResetMailData, ResetTransactionPinEmailData, AjoContributionConfirmationEmailData, InvestmentConfirmationEmailData, SendPushNotificationInput, BaseEmailData, EducationEmailData, EmailVerificationMailData, DeviceVerificationMailData, NewDeviceNotificationData, SubAccountReportEmailData, BulkEmailData } from './notification.interface';
export declare class NotificationClient {
    private readonly natsClient;
    constructor(natsClient: ClientProxy);
    private validatePhoneNumber;
    private validateEmailAddress;
    sendSms(to: string, message: string, user_id?: string): Promise<void>;
    sendSmsPreference(to: string, message: string, user_id?: string): Promise<void>;
    /**
     * This utility method sends an OTP message via the SMS channel.
     *
     * @param to - The recipient phone number
     * @param message - The OTP message
     * @deprecated
     */
    sendSmsOTP(to: string, message: string, user_id?: string): Promise<void>;
    sendCustomMail(to: string | string[], options: CustomMailSendOptions & {
        user_id?: string;
        bypassPreferenceCheck?: boolean;
    }): Promise<void>;
    sendBulkEmail(data: BulkEmailData): Promise<void>;
    sendEmailVerificationMail(to: string | string[], data: EmailVerificationMailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendPasswordResetMail(to: string | string[], data: PasswordResetMailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendCreditTransactionMail(to: string | string[], data: CreditTransactionMailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendDebitTransactionMail(to: string | string[], data: DebitTransactionMailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendAccountFreezeMail(to: string | string[], data: AccountFreezeEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendAccountStatementMail(to: string | string[], data: AccountStatementEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendAccountUnfreezeMail(to: string | string[], data: AccountUnfreezeEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendAdminNewLoanMail(to: string | string[], data: NewLoanApplicationEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendAjoCancellationMail(to: string | string[], data: AjoCancellationEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendAjoContributionMail(to: string | string[], data: AjoContributionEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendAjoInvitationMail(to: string | string[], data: AjoInviteEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendAjoMembershipMail(to: string | string[], data: AjoMembershipUpdateEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendContactMail(to: string | string[], data: ContactMessageEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendForgetPinOTPMail(to: string | string[], data: ResetTransactionPinEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendInvestmentCancellationMail(to: string | string[], data: InvestmentCancellationEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendLoanApprovedMail(to: string | string[], data: LoanApprovedEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendLoanRepaymentFailedMail(to: string | string[], data: LoanRepaymentFailedEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendLoanRepaymentSuccessMail(to: string | string[], data: LoanRepaymentConfirmationEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendNewAjoMail(to: string | string[], data: AjoContributionConfirmationEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendNewInvestmentMail(to: string | string[], data: InvestmentConfirmationEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    /**
     * Sends an email notification for electricity purchase
     * @param to - Recipient's email address
     * @param data - Electricity purchase details
     */
    sendElectricityPurchaseEmail(to: string | string[], data: Omit<ElectricityEmailData, keyof BaseEmailData>, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    /**
     * Sends an email notification for education service purchase
     * @param to - Recipient's email address
     * @param data - Education service purchase details
     */
    sendEducationPurchaseEmail(to: string | string[], data: Omit<EducationEmailData, keyof BaseEmailData>, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendDeviceVerificationEmail(to: string | string[], data: Omit<DeviceVerificationMailData, keyof BaseEmailData>, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendNewDeviceNotificationEmail(to: string | string[], data: Omit<NewDeviceNotificationData, keyof BaseEmailData>, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendNewDeviceNotification(to: string | string[], data: NewDeviceNotificationData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    /**
     * Sends a sub-account report email with the provided data
     * @param to Recipient email address
     * @param data Sub-account report data
     */
    sendSubAccountReportEmail(to: string | string[], data: SubAccountReportEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    sendWelcomeMail(to: string | string[], data: BaseEmailData, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    /**
     * Sends generated OTP to a recipient
     * @param to - recipient phone number or email
     * @param data - OTP data
     * @param channel - OTP notification channel. Defaults to sms.
     */
    sendOTP(to: string | string[], data: OTPMailData, channel?: OTPNotificationChannel, user_id?: string, bypassPreferenceCheck?: boolean): Promise<void>;
    /**
     * Sends push notification
     */
    sendPush(input: SendPushNotificationInput): Promise<void>;
}
