"use server";

import { questionsType } from "./ExpertForm";
import { prisma } from "@/lib/prisma";          // ✅ bon import pour le main website
import { auth } from "@/auth/lucia";
import * as context from "next/headers";

export const createAnswers = async (
  answers: Record<string, questionsType>
) => {
  try {
    // 1️⃣ Vérifier la session
    const authRequest = auth.handleRequest("POST", context);
    const session = await authRequest.validate();

    if (!session) {
      return { status: "fail", error: "Not authenticated." };
    }

    const userId = session.user.userId;

    // 2️⃣ Normaliser les réponses (on force le userId côté serveur)
    const answersList = Object.values(answers).map((a) => ({
      userId,
      questionId: a.questionId,
      answer: a.answer,
    }));

    // 3️⃣ Vérifier l’utilisateur (ID + email vérifiés)
    const user = await prisma.user.findUnique({
      where: { id: userId },
      select: { idVerified: true, emailVerified: true },
    });

    if (!user) {
      return { status: "fail", error: "User not found." };
    }
    if (!user.idVerified) {
      return { status: "fail", error: "Your ID is not verified." };
    }
    if (!user.emailVerified) {
      return { status: "fail", error: "Your email is not verified." };
    }

    // 4️⃣ Vérifier s’il y a déjà une candidature en attente
    const pendingApplication = await prisma.admin_expert_application.findFirst({
      where: { userId, status: "PENDING" },
    });

    if (pendingApplication) {
      return {
        status: "fail",
        error: "A pending application already exists.",
      };
    }

    // 5️⃣ Créer la candidature + réponses
    await prisma.admin_expert_application.create({
      data: {
        userId,
        // ⚠️ on garde le nom de relation que tu avais déjà : "answer"
        answer: {
          createMany: {
            data: answersList,
          },
        },
      },
    });

    // 6️⃣ Créer la notification admin
    await prisma.admin_notification.create({
      data: {
        title: "New Expert Application",
        description: "A new expert application has been submitted.",
        link: `${
          process.env.NODE_ENV === "production"
            ? process.env.NEXT_PUBLIC_BASE_URL
            : "http://localhost:3001"
        }/023115_mbc-admin/dashboard/pages/expertapplication`,
      },
    });

    // 7️⃣ Mettre à jour le statut de notification
    await prisma.admin_notification_status.update({
      where: { id: 1 },
      data: {
        newExpertApplication: "NOTSEEN",
        status: "NOTSEEN",
      },
    });

    return { status: "success" };
  } catch (error: any) {
    console.error("createAnswers error:", error);
    return { status: "fail", error: error.message ?? "Unknown error" };
  }
};
