"use server";

import { auth } from "@/config/auth";
import { AppError } from "@/core/errors/app-error";
import { PrismaSuppressedEmailsRepository } from "@/modules/suppression/repositories/prisma-suppressed-emails-repository";
import { getMailProviderForSender } from "../providers/mail-provider-factory";
import { PrismaCampaignLogsRepository } from "../repositories/prisma-campaign-logs-repository";
import { ResendCampaignToContactUseCase } from "../use-cases/resend-campaign-to-contact-use-case";

export async function resendCampaignToContactAction(logId: string, contactId: string) {
  const session = await auth();
  if (!session?.user?.id) throw new Error("Unauthorized");

  try {
    const useCase = new ResendCampaignToContactUseCase(
      new PrismaCampaignLogsRepository(),
      new PrismaSuppressedEmailsRepository(),
      getMailProviderForSender
    );
    return await useCase.execute({ logId, contactId, userId: session.user.id });
  } catch (error) {
    if (error instanceof AppError) {
      throw new Error(error.message);
    }
    throw error;
  }
}
