export interface EmailEvent {
  id: string;
  timestamp: string;
  type: 'email_sent' | 'email_failed' | 'connection_verified' | 'connection_failed';
  provider: 'smtp' | 'sendgrid' | 'ses';
  recipient?: string;
  subject?: string;
  messageId?: string;
  duration?: number;
  error?: {
    message: string;
    code?: string;
    details?: any;
  };
  metadata?: Record<string, any>;
}

export interface ObservabilityConfig {
  enabled: boolean;
  logLevel?: 'debug' | 'info' | 'warn' | 'error';
  includeSensitiveData?: boolean;
  customLogger?: (event: EmailEvent) => void;
  metricsCollector?: (metrics: EmailMetrics) => void;
  tracingEnabled?: boolean;
}

export interface EmailMetrics {
  totalSent: number;
  totalFailed: number;
  successRate: number;
  averageSendTime: number;
  providerBreakdown: {
    smtp: { sent: number; failed: number; avgTime: number };
    sendgrid: { sent: number; failed: number; avgTime: number };
    ses: { sent: number; failed: number; avgTime: number };
  };
  last24Hours: {
    sent: number;
    failed: number;
    avgTime: number;
  };
  sesMetrics?: {
    quotaUsage: number;
    bounceRate: number;
    complaintRate: number;
    deliveryRate: number;
    lastQuotaCheck?: string;
  };
}

export interface AuditLog {
  timestamp: string;
  action: 'email_sent' | 'email_failed' | 'configuration_changed' | 'connection_verified';
  userId?: string;
  ipAddress?: string;
  emailDetails: {
    to: string[];
    subject: string;
    provider: string;
    messageId?: string;
  };
  metadata?: Record<string, any>;
}
