import { EmailOptions, EmailResponse, SmtpConfig, EmailProviderConfig } from '../interfaces/email-options.interface';
import { EmailRequest } from '../interfaces/email-request.interface';
import { IEmailService } from '../interfaces/email-service.interface';
import { ObservabilityService } from './observability.service';
/**
 * EmailService - A reusable service for sending emails
 *
 * This service can be used in both NodeJS/JavaScript and NestJS/TypeScript projects.
 */
export declare class EmailService implements IEmailService {
    private transporter?;
    private defaultFrom?;
    private providerType;
    private sendGridConfigured;
    private sesService?;
    private observability;
    private templateManager;
    /**
     * Create an instance of EmailService
     *
     * @param providerConfig - Email provider configuration (SMTP, SendGrid, or SES)
     * @param defaultFrom - Default sender email and name
     * @param observabilityService - Optional observability service instance
     */
    constructor(providerConfig: EmailProviderConfig | SmtpConfig, // Support legacy constructor
    defaultFrom?: {
        email: string;
        name?: string;
    }, observabilityService?: ObservabilityService);
    /**
     * Configure email provider based on configuration
     * @private
     */
    private configureProvider;
    /**
     * Verify email provider connection
     *
     * @returns Promise<boolean> - True if connection is successful
     */
    verifyConnection(): Promise<boolean>;
    /**
     * Validate email options
     * @private
     */
    private validateEmailOptions;
    /**
     * Centralized error handler for email operations
     * @private
     */
    private handleError;
    /**
     * Send email using the new EmailRequest interface
     *
     * @param request - Email request
     * @returns Promise<EmailResponse> - Response with success status and message ID
     */
    sendEmail(request: EmailRequest): Promise<EmailResponse>;
    /**
     * Send email using legacy EmailOptions interface (for backward compatibility)
     *
     * @param options - Email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     */
    sendEmailLegacy(options: EmailOptions): Promise<EmailResponse>;
    /**
     * Create standardized email response
     * @private
     */
    private createSuccessResponse;
    /**
     * Create standardized error response
     * @private
     */
    private createErrorResponse;
    /**
     * Send an email using SMTP
     *
     * @param options - Email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     * @private
     */
    protected sendWithSmtp(options: EmailOptions): Promise<EmailResponse>;
    /**
     * Send an email using SendGrid
     *
     * @param options - Email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     * @private
     */
    private sendWithSendGrid;
    /**
     * Send an email using SES
     *
     * @param options - Email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     * @private
     */
    private sendWithSes;
    /**
     * Encode attachment content for SendGrid
     * @private
     */
    private encodeAttachmentContent;
    /**
     * Send a plain text email
     *
     * @param to - Recipient(s)
     * @param subject - Email subject
     * @param text - Plain text content
     * @param options - Additional email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     */
    sendPlainText(to: EmailOptions['to'], subject: string, text: string, options?: Partial<EmailOptions>): Promise<EmailResponse>;
    /**
     * Send an HTML email
     *
     * @param to - Recipient(s)
     * @param subject - Email subject
     * @param html - HTML content
     * @param options - Additional email options
     * @returns Promise<EmailResponse> - Response with success status and message ID
     */
    sendHtml(to: EmailOptions['to'], subject: string, html: string, options?: Partial<EmailOptions>): Promise<EmailResponse>;
    /**
     * Format recipients to the format expected by nodemailer
     *
     * @param recipients - Single recipient or array of recipients
     * @returns string - Formatted recipients string
     */
    private formatRecipients;
    /**
     * Validate a template using the appropriate template service
     *
     * @param templateId - Template identifier
     * @returns Promise<boolean> - True if template is valid
     */
    validateTemplate(templateId: string): Promise<boolean>;
    /**
     * Get template information
     *
     * @param templateId - Template identifier
     * @returns Promise<TemplateInfo> - Template information
     */
    getTemplateInfo(templateId: string): Promise<import("../interfaces/template.interface").TemplateInfo>;
    /**
     * Validate template with detailed results
     *
     * @param templateId - Template identifier
     * @param data - Template data to validate
     * @returns Promise<TemplateValidationResult> - Template validation results
     */
    validateTemplateWithDetails(templateId: string, data: Record<string, any>): Promise<import("../interfaces/template.interface").TemplateValidationResult>;
    /**
     * List available templates for the current provider
     *
     * @returns Promise<string[]> - List of template names/IDs
     */
    listTemplates(): Promise<string[]>;
    /**
     * Get template service statistics
     *
     * @returns Record<string, any> - Service statistics
     */
    getTemplateServiceStats(): Record<string, any>;
}
//# sourceMappingURL=email.service.d.ts.map