"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 { ParseContactImportUseCase } from "../use-cases/parse-contact-import-use-case";

const ALLOWED_EXTENSION = ".csv";

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

  try {
    const file = formData.get("file");

    if (!(file instanceof File)) {
      throw AppError.badRequest("Nenhum arquivo enviado");
    }
    if (!file.name.toLowerCase().endsWith(ALLOWED_EXTENSION)) {
      throw AppError.badRequest("Só arquivos .csv são suportados nesta versão");
    }

    const csvContent = await file.text();
    const useCase = new ParseContactImportUseCase(
      new PrismaContactImportJobsRepository(),
      new PrismaContactImportRowsRepository()
    );

    return await useCase.execute({
      fileName: file.name,
      csvContent,
      createdById: session.user.id,
    });
  } catch (error) {
    if (error instanceof AppError) {
      throw new Error(error.message);
    }
    throw error;
  }
}
