import { MulterFile } from '../utils';
export interface CustomMailSendOptions {
    subject: string;
    from?: string;
    text?: string;
    html?: string;
    template?: string | Buffer;
    attachments?: MulterFile[] | Buffer[];
    data?: object;
}
export interface TemplateMailSendOption<D = Record<string, string | number>> {
    to: string | string[];
    attachments?: MulterFile[] | Buffer[];
    data?: D;
    user_id?: string;
    bypassPreferenceCheck?: boolean;
}
export interface BulkEmailData {
    to: string[];
    subject: string;
    template: string;
    user_id?: string;
    bypassPreferenceCheck?: boolean;
    context: Record<string, any>;
}
export interface BaseEmailData {
    firstName: string;
    currentYear: number;
}
export interface OTPMailData extends Omit<BaseEmailData, 'firstName'> {
    firstName?: string;
    otp: number;
    expiration: string;
}
export interface PasswordResetMailData extends OTPMailData {
}
export interface EmailVerificationMailData extends OTPMailData {
}
export interface BaseTransactionMailData extends BaseEmailData {
    amount: string;
    currency: string;
    type: string;
    direction: string;
    totalAmount: string;
    paymentReference: string;
    description: string;
    createdAt: string;
    beneficiaryAccountName?: string;
    beneficiaryAccountNumber?: string;
}
export interface CreditTransactionMailData extends BaseTransactionMailData {
}
export interface DebitTransactionMailData extends BaseTransactionMailData {
}
export interface AccountFreezeEmailData extends BaseEmailData {
    freezeDate: string;
    reason: string;
}
export interface AccountStatementEmailData extends BaseEmailData {
    userName: string;
    startDate: string;
    format: 'pdf' | 'csv' | 'xlsx';
    expiryDate: string;
    statementUrl: string;
    isAdmin?: boolean;
}
export interface AccountUnfreezeEmailData extends BaseEmailData {
    unfreezeDate: string;
    reason: string;
}
export interface NewLoanApplicationEmailData extends BaseEmailData {
    amount: number;
    repaymentDate: string;
    status: string;
    email: string;
    phoneNumber: string;
    userId: string;
    applicationDate: string;
}
export interface AjoCancellationEmailData extends BaseEmailData {
    ajoName: string;
    refundAmount: number;
}
export interface AjoContributionEmailData extends BaseEmailData {
    amount: number;
    ajoName: string;
    startDate: string;
    lastName?: string;
}
export interface AjoInviteEmailData extends BaseEmailData {
    ajoName: string;
    acceptUrl: string;
}
export interface AjoMembershipUpdateEmailData extends BaseEmailData {
    ajoName: string;
    status: string;
}
export interface ContactMessageEmailData extends BaseEmailData {
    name: string;
    email: string;
    message: string;
}
export interface ResetTransactionPinEmailData extends OTPMailData {
}
export interface InvestmentCancellationEmailData extends BaseEmailData {
    amount: number;
    reason: string;
}
export interface LoanApprovedEmailData extends BaseEmailData {
    amount: number;
    repaymentDate: string;
    status: string;
}
export interface LoanRepaymentFailedEmailData extends BaseEmailData {
    amount: number;
    repaymentDate: string;
}
export interface LoanRepaymentConfirmationEmailData extends BaseEmailData {
    amount: number;
    remainingBalance?: number;
    isFullyRepaid: boolean;
    wasDefaulted?: boolean;
}
export interface AjoContributionConfirmationEmailData extends BaseEmailData {
    ajoName: string;
    amount: number;
    startDate: string;
    lastName?: string;
}
export interface InvestmentConfirmationEmailData extends BaseEmailData {
    type: string;
    amount: number;
    duration: string;
    startDate: string;
    maturityDate: string;
    expectedReturn: number;
}
export interface SendPushNotificationInput {
    title: string;
    body: string;
    user_id?: string;
    tokens?: string[];
    data?: {
        resourceType: string;
        resourceId: string;
    };
    priority?: boolean;
    topic?: string;
    bypassPreferenceCheck?: boolean;
}
export interface ElectricityEmailData extends BaseEmailData {
    amount: number;
    units: number;
    purchase_code: string;
}
export interface EducationEmailData extends BaseEmailData {
    service: string;
    amount: number;
    purchase_code: string;
}
export interface DeviceVerificationMailData extends BaseEmailData {
    otp: string;
    deviceId: string;
    deviceName?: string;
    time?: string;
    expiration?: string;
}
export interface NewDeviceNotificationData extends BaseEmailData {
    deviceId: string;
    loginTime: string;
    deviceInfo?: string;
    location?: string;
}
export interface SubAccountReportEmailData {
    subAccounts: Array<{
        name: string;
        type: string;
        balance: number | string;
        currency: string;
        isActive: boolean;
    }>;
}
