import { SuppressionReason } from "@prisma/client";
import { prisma } from "@/shared/infra/prisma/prisma-client";
import { SuppressedEmailsRepository } from "./suppressed-emails-repository";

export class PrismaSuppressedEmailsRepository implements SuppressedEmailsRepository {
  async isSuppressed(email: string): Promise<boolean> {
    const found = await prisma.suppressedEmail.findUnique({ where: { email } });
    return found !== null;
  }

  async add(email: string, reason: SuppressionReason, source: string) {
    return prisma.suppressedEmail.upsert({
      where: { email },
      create: { email, reason, source },
      update: { reason, source },
    });
  }

  async remove(email: string): Promise<void> {
    await prisma.suppressedEmail.deleteMany({ where: { email } });
  }

  async findAll() {
    return prisma.suppressedEmail.findMany({ orderBy: { createdAt: "desc" } });
  }
}
