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[];
    attachments?: MulterFile[] | Buffer[];
    data?: D;
}
export interface BaseEmailData {
    firstName: string;
    currentYear: number;
}
export interface OTPMailData extends BaseEmailData {
    otp: string;
    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: 'pending' | 'approved' | 'rejected';
}
export interface AjoCancellationEmailData extends BaseEmailData {
    ajoName: string;
    refundAmount: number;
}
export interface AjoContributionEmailData extends BaseEmailData {
    amount: number;
    ajoName: string;
}
export interface AjoInviteEmailData extends BaseEmailData {
    ajoName: string;
    acceptUrl: string;
}
export interface AjoMembershipUpdateEmailData extends BaseEmailData {
    ajoName: string;
    status: 'active' | 'inactive' | 'pending' | 'cancelled';
}
export interface ContactMessageEmailData extends BaseEmailData {
    name: string;
    email: string;
    message: string;
}
export interface ResetTransactionPinEmailData extends BaseEmailData {
    otpCode: string;
    expiryMinutes: number;
}
export interface InvestmentCancellationEmailData extends BaseEmailData {
    amount: number;
    reason: string;
}
export interface LoanApprovedEmailData extends BaseEmailData {
    amount: number;
    repaymentDate: string;
    status: 'approved';
}
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;
    frequency: 'daily' | 'weekly' | 'monthly';
    startDate: string;
    duration: number;
}
export interface InvestmentConfirmationEmailData extends BaseEmailData {
    type: string;
    amount: number;
    duration: string;
    startDate: string;
    maturityDate: string;
    expectedReturn: number;
}
export interface SendPushNotificationInput {
    title: string;
    body: string;
    userId?: string;
    tokens?: string[];
    data?: {
        resourceType: string;
        resourceId: string;
    };
    priority?: boolean;
    topic?: string;
}
