// ============================================================
// IEmailVerificationRepository — 邮件验证码仓储接口
//
// 与 ISmsVerificationRepository 完全对称。
// 实现: EmailVerificationRepository (TypeORM + PostgreSQL)
//
// 关键方法说明:
//   create()          — 写入新验证记录（每次发送新码）
//   findLatestValid() — 查找最新的未过期未验证记录（DB 路径验证）
//   save()            — 更新 attempts/verifiedAt 字段
//   getDailySendCount() — 今日发送次数，用于日限额检查
//   deleteExpired()   — 清理过期记录（可由定时任务调用）
// ============================================================

import { EmailVerification, EmailVerificationType } from '../entities/email-verification.entity';

export interface IEmailVerificationRepository {
  /** 创建验证记录 */
  create(data: {
    email: string;
    code: string;
    type: EmailVerificationType;
    expiresAt: Date;
  }): Promise<EmailVerification>;

  /** 查找指定邮箱和类型的最新有效验证码 (未过期 + 未验证) */
  findLatestValid(
    email: string,
    type: EmailVerificationType,
  ): Promise<EmailVerification | null>;

  /** 保存 (更新 attempts / verifiedAt) */
  save(verification: EmailVerification): Promise<EmailVerification>;

  /** 获取今日发送次数 */
  getDailySendCount(email: string): Promise<number>;

  /** 清理过期记录，返回删除数量 */
  deleteExpired(): Promise<number>;
}

export const EMAIL_VERIFICATION_REPOSITORY = Symbol('IEmailVerificationRepository');
