// ============================================================
// EmailLog Entity — 邮件发送审计日志
//
// 表名: email_logs
// 职责: 记录每一次邮件发送的完整信息，用于运营分析、问题排查、
//       以及监管合规（金融类 App 通常需要留存通信记录）。
//
// 与 SmsLog 结构对称，provider 字段区分发送渠道：
//   - 'gmail'   : 通过 GmailProvider (SMTP) 真实发送
//   - 'console' : 开发模式 ConsoleEmailProvider（打印到控制台）
//
// providerId: Gmail 返回的 Message-ID，可用于追踪邮件投递状态。
// errorMsg:   发送失败时记录错误详情，便于排查 SMTP 配置问题。
//
// 状态枚举:
//   PENDING → 刚创建（理论上不应长期停留此状态）
//   SENT    → Provider 成功返回，邮件已提交 SMTP
//   FAILED  → Provider 返回错误，邮件未发送
// ============================================================

import {
  Entity,
  Column,
  PrimaryGeneratedColumn,
  CreateDateColumn,
  Index,
} from 'typeorm';
import { EmailVerificationType } from './email-verification.entity';

export enum EmailDeliveryStatus {
  PENDING = 'PENDING',
  SENT = 'SENT',
  FAILED = 'FAILED',
}

@Entity('email_logs')
@Index('idx_email_logs_email', ['email'])
@Index('idx_email_logs_created', ['createdAt'])
export class EmailLog {
  @PrimaryGeneratedColumn('increment', { type: 'bigint' })
  id: string;

  @Column({ name: 'user_id', type: 'uuid', nullable: true })
  userId: string | null;

  @Column({ type: 'varchar', length: 100 })
  email: string;

  @Column({ type: 'varchar', length: 20 })
  type: EmailVerificationType;

  @Column({ type: 'varchar', length: 20, default: EmailDeliveryStatus.PENDING })
  status: EmailDeliveryStatus;

  @Column({ type: 'varchar', length: 50, nullable: true })
  provider: string | null;

  @Column({ name: 'provider_id', type: 'varchar', length: 200, nullable: true })
  providerId: string | null;

  @Column({ name: 'error_msg', type: 'text', nullable: true })
  errorMsg: string | null;

  @CreateDateColumn({ name: 'created_at', type: 'timestamptz' })
  createdAt: Date;
}
