"use server";

import { z } from "zod";
import { getServerSession } from "next-auth/next";
import { authOptions } from "@/lib/auth";
import { db } from '@/lib/db';
import { inscripcion } from '@/db/schema';
import { revalidatePath } from "next/cache";
import crypto from "crypto";

// Esquema de validación para el servidor
const ReportarPagoSchema = z.object({
  cursoId: z.string().uuid(),
  comprobante: z
    .any()
    .refine((file) => file?.size <= 5000000, `El tamaño máximo es 5MB.`)
    .refine(
      (file) => ["image/jpeg", "image/png", "application/pdf"].includes(file?.type),
      "Solo se aceptan formatos .jpg, .png y .pdf"
    ),
});

export async function reportarPago(formData: FormData) {
  try {
    const session = await getServerSession(authOptions);

    if (!session || session.user.role !== "ESTUDIANTE") {
      return { success: false, error: "No autorizado" };
    }

    const archivo = formData.get("comprobante") as File;
    const cursoId = formData.get("cursoId") as string;

    const parseado = ReportarPagoSchema.safeParse({
      cursoId,
      comprobante: archivo,
    });

    if (!parseado.success) {
      return { success: false, error: parseado.error.issues[0].message };
    }

    // AQUI: Integración con AWS S3 o Cloudinary
    // const uploadResult = await uploadToCloudinary(archivo);
    // const fileUrl = uploadResult.secure_url;
    const fileUrl = "https://mocked-cloudinary-url.com/comprobante/123.pdf"; // Placeholder

    // Crear o actualizar la inscripción a pendiente de pago
    const id = crypto.randomUUID();
    await db.insert(inscripcion)
      .values({
        id,
        userId: session.user.id,
        cursoId: cursoId,
        comprobantePagoUrl: fileUrl,
        estadoPago: "PENDIENTE",
        updatedAt: new Date()
      })
      .onDuplicateKeyUpdate({
        set: {
          comprobantePagoUrl: fileUrl,
          estadoPago: "PENDIENTE",
          updatedAt: new Date()
        }
      });

    revalidatePath("/dashboard/estado-cuenta");
    revalidatePath("/admin/verificacion-pagos");

    return { success: true, message: "Pago reportado correctamente. Esperando validación." };
  } catch (error) {
    console.error("Error al reportar pago:", error);
    return { success: false, error: "Ocurrió un error al procesar el pago" };
  }
}
