import { Prisma } from "@prisma/client";
import { AppError } from "@/core/errors/app-error";
import { SendersRepository } from "../repositories/senders-repository";

interface DeleteSenderUseCaseRequest {
  id: string;
  userId: string;
}

export class DeleteSenderUseCase {
  constructor(private sendersRepository: SendersRepository) {}

  async execute({ id, userId }: DeleteSenderUseCaseRequest): Promise<{ success: boolean }> {
    const sender = await this.sendersRepository.findById(id);

    if (sender?.userId !== userId) {
      throw AppError.notFound("Remetente não encontrado");
    }

    try {
      await this.sendersRepository.delete(id);
    } catch (error) {
      if (error instanceof Prisma.PrismaClientKnownRequestError && error.code === "P2003") {
        throw AppError.badRequest(
          "Não é possível excluir este remetente porque ele está vinculado a uma ou mais campanhas."
        );
      }
      throw error;
    }

    return { success: true };
  }
}
