import { ContactImportJob } from "@prisma/client";
import { AppError } from "@/core/errors/app-error";
import { confirmImportMappingSchema } from "../dtos/confirm-import-mapping-schema";
import { ContactImportJobsRepository } from "../repositories/contact-import-jobs-repository";

interface ConfirmImportMappingUseCaseRequest {
  jobId: string;
  body: unknown;
}

interface ConfirmImportMappingUseCaseResponse {
  job: ContactImportJob;
}

export class ConfirmImportMappingUseCase {
  constructor(private contactImportJobsRepository: ContactImportJobsRepository) {}

  async execute({ jobId, body }: ConfirmImportMappingUseCaseRequest): Promise<ConfirmImportMappingUseCaseResponse> {
    const data = confirmImportMappingSchema.parse(body);

    const existing = await this.contactImportJobsRepository.findById(jobId);
    if (!existing) {
      throw AppError.notFound("Job de importação não encontrado");
    }
    if (existing.status !== "MAPPING") {
      throw AppError.badRequest("Este job de importação já foi configurado");
    }

    const job = await this.contactImportJobsRepository.updateMapping(jobId, data);
    return { job };
  }
}
