"use server";

import { auth } from "@/config/auth";
import { AppError } from "@/core/errors/app-error";
import { PrismaCampaignLogsRepository } from "@/modules/campaigns/repositories/prisma-campaign-logs-repository";
import { PrismaEmailEventsRepository } from "@/modules/ses-webhooks/repositories/prisma-email-events-repository";
import { PrismaContactsRepository } from "../repositories/prisma-contacts-repository";
import { ExportContactEmailHistoryUseCase } from "../use-cases/export-contact-email-history-use-case";
import { buildEmailHistoryCsv } from "../entities/build-email-history-csv";

export async function exportContactEmailHistoryAction(
  contactId: string,
  status?: "opened" | "unopened"
) {
  const session = await auth();
  if (!session?.user?.id) throw new Error("Unauthorized");

  try {
    const useCase = new ExportContactEmailHistoryUseCase(
      new PrismaContactsRepository(),
      new PrismaCampaignLogsRepository(),
      new PrismaEmailEventsRepository()
    );
    const { contact, items } = await useCase.execute({ contactId, status });

    return {
      csvContent: buildEmailHistoryCsv(items),
      fileName: `historico_emails_${contact.email}.csv`,
    };
  } catch (error) {
    if (error instanceof AppError) {
      throw new Error(error.message);
    }
    throw error;
  }
}
