"use server";
import { db } from '@/lib/db';
import { inscripcion, user, curso, notificacion } from '@/db/schema';
import { eq, and } from 'drizzle-orm';
import { revalidatePath } from "next/cache";
import crypto from "crypto";

export async function solicitarInscripcion(cursoId: string, userId: string, colegioId: string, observacion: string) {
  try {
    // Verificar si ya está inscrito o solicitado
    const existente = await db.query.inscripcion.findFirst({
      where: and(eq(inscripcion.userId, userId), eq(inscripcion.cursoId, cursoId))
    });

    if (existente) {
      return { success: false, error: "Ya existe una solicitud o inscripción para este curso." };
    }

    // Crear la inscripción en estado PENDIENTE_CONTACTAR
    await db.insert(inscripcion).values({
      id: crypto.randomUUID(),
      userId,
      cursoId,
      estadoFlujo: "PENDIENTE_CONTACTAR",
      estadoPago: "PENDIENTE",
      updatedAt: new Date()
    });

    // Enviar notificación al colegio
    const foundUser = await db.query.user.findFirst({ where: eq(user.id, userId) });
    const foundCurso = await db.query.curso.findFirst({ where: eq(curso.id, cursoId) });

    if (foundUser && foundCurso) {
      await db.insert(notificacion).values({
        id: crypto.randomUUID(),
        colegioId,
        titulo: `Nueva Solicitud de Inscripción: ${foundCurso.titulo}`,
        mensaje: `El estudiante ${foundUser.name || foundUser.email} ha solicitado inscribirse en el curso. \nObservación: ${observacion || "Ninguna"}`,
        cursoId,
        userId,
      });
    }

    revalidatePath("/estudiante");
    return { success: true };
  } catch (error: any) {
    console.error(error);
    return { success: false, error: "Error al procesar la solicitud." };
  }
}
