"use server";

import { revalidatePath } from "next/cache";

import { auth } from "@/config/auth";
import { AppError } from "@/core/errors/app-error";
import { UpdateCampaignDTO } from "../dtos/update-campaign-dto";
import { PrismaCampaignsRepository } from "../repositories/prisma-campaigns-repository";
import { UpdateCampaignUseCase } from "../use-cases/update-campaign-use-case";

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

  try {
    const useCase = new UpdateCampaignUseCase(new PrismaCampaignsRepository());
    const { campaign } = await useCase.execute({ id, userId: session.user.id, data });

    revalidatePath("/campaigns");
    revalidatePath(`/campaigns/${id}`);

    return campaign;
  } catch (error) {
    if (error instanceof AppError) {
      throw new Error(error.message);
    }
    throw error;
  }
}
