import { Campaign } from "@prisma/client";
import { AppError } from "@/core/errors/app-error";
import { UpdateCampaignDTO } from "../dtos/update-campaign-dto";
import { CampaignsRepository } from "../repositories/campaigns-repository";

interface UpdateCampaignUseCaseRequest {
  id: string;
  userId: string;
  data: UpdateCampaignDTO;
}

interface UpdateCampaignUseCaseResponse {
  campaign: Campaign;
}

export class UpdateCampaignUseCase {
  constructor(private campaignsRepository: CampaignsRepository) {}

  async execute({
    id,
    userId,
    data,
  }: UpdateCampaignUseCaseRequest): Promise<UpdateCampaignUseCaseResponse> {
    const existing = await this.campaignsRepository.findById(id);

    if (existing?.createdById !== userId) {
      throw AppError.notFound("Campanha não encontrada");
    }

    const campaign = await this.campaignsRepository.update(id, data);

    return { campaign };
  }
}
