"use server";

import { auth } from "@/config/auth";
import { AppError } from "@/core/errors/app-error";
import { PrismaContactImportJobsRepository } from "../repositories/prisma-contact-import-jobs-repository";
import { PrismaContactImportRowsRepository } from "../repositories/prisma-contact-import-rows-repository";
import { PrismaContactsRepository } from "../repositories/prisma-contacts-repository";
import { PrismaContactListsRepository } from "../repositories/prisma-contact-lists-repository";
import { ProcessImportBatchUseCase } from "../use-cases/process-import-batch-use-case";

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

  try {
    const useCase = new ProcessImportBatchUseCase(
      new PrismaContactImportJobsRepository(),
      new PrismaContactImportRowsRepository(),
      new PrismaContactsRepository(),
      new PrismaContactListsRepository()
    );
    return await useCase.execute({ jobId });
  } catch (error) {
    if (error instanceof AppError) {
      throw new Error(error.message);
    }
    throw error;
  }
}
