import { OnModuleInit } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { Repository } from 'typeorm';
import { EmailMetric, EmailType } from './entities/email-metric.entity';
import { User } from '../users/entities/user.entity';
import { UsersService } from '../users/users.service';
import { ExcelExportService } from '../common/services/excel-export.service';
import { PdfExportService } from '../common/services/pdf-export.service';
import { Newsletter } from '../newsletter/entities/newsletter.entity';
export declare class EmailService implements OnModuleInit {
    private readonly metricsRepo;
    private readonly configService;
    private readonly usersService;
    private readonly excelExportService;
    private readonly pdfExportService;
    private readonly logger;
    private transporter;
    private readonly templates;
    constructor(metricsRepo: Repository<EmailMetric>, configService: ConfigService, usersService: UsersService, excelExportService: ExcelExportService, pdfExportService: PdfExportService);
    onModuleInit(): Promise<void>;
    sendApprovalEmail(user: User): Promise<void>;
    sendRejectionEmail(user: User, reason: string, instructions?: string): Promise<void>;
    sendPasswordResetEmail(user: User, resetToken: string): Promise<void>;
    sendAccountLockedEmail(user: User, resetToken: string): Promise<void>;
    sendContactEmail(params: {
        to: string[];
        subject: string;
        fromEmail: string;
        message: string;
    }): Promise<void>;
    sendNewsletterEmail(params: {
        newsletter: Newsletter;
        recipientEmail: string;
        userId: string;
        isTest: boolean;
        enableUnsubscribe: boolean;
    }): Promise<{
        ok: boolean;
        error?: string;
    }>;
    renderNewsletterPreviewHtml(newsletter: Newsletter): Promise<string>;
    findAlreadySentUserIds(newsletterId: string): Promise<Set<string>>;
    countNewsletterOpens(newsletterId: string): Promise<number>;
    recordOpen(token: string): Promise<void>;
    unsubscribe(token: string): Promise<void>;
    findMetrics(offset?: number, limit?: number, emailType?: EmailType, internalName?: string): Promise<{
        data: EmailMetric[];
        total: number;
    }>;
    getMetricsStats(emailType?: EmailType, internalName?: string): Promise<{
        sent: number;
        opened: number;
    }>;
    listInternalNames(emailType?: EmailType): Promise<string[]>;
    exportMetricsPdf(emailType?: EmailType, internalName?: string): Promise<Buffer>;
    private applyMetricsFilters;
    findAllMetricsForExport(): Promise<EmailMetric[]>;
    exportMetricsXlsx(): Promise<Buffer>;
    cleanupOldMetrics(): Promise<void>;
    private renderTemplate;
}
