import { NextRequest, NextResponse } from "next/server";
import { prisma } from "@/lib/prisma";

export async function GET(req: NextRequest) {
  const token = req.nextUrl.searchParams.get("token");
  const baseUrl = process.env.NEXT_PUBLIC_APP_URL || req.nextUrl.origin;

  if (!token) {
    return NextResponse.redirect(
      `${baseUrl}/student/verify-email?status=invalid`
    );
  }

  try {
    const student = await prisma.students.findFirst({
      where: { verification_token: token },
    });

    if (!student) {
      return NextResponse.redirect(
        `${baseUrl}/student/verify-email?status=invalid`
      );
    }

    if (student.email_verified) {
      return NextResponse.redirect(
        `${baseUrl}/student/verify-email?status=already`
      );
    }

    if (
      student.verification_token_expiry &&
      new Date(student.verification_token_expiry) < new Date()
    ) {
      return NextResponse.redirect(
        `${baseUrl}/student/verify-email?status=expired`
      );
    }

    await prisma.students.update({
      where: { id: student.id },
      data: {
        email_verified: true,
        status: "active",
        verification_token: null,
        verification_token_expiry: null,
      },
    });

    return NextResponse.redirect(
      `${baseUrl}/student/verify-email?status=success`
    );
  } catch (error) {
    console.error("Verify Email Error:", error);
    return NextResponse.redirect(
      `${baseUrl}/student/verify-email?status=invalid`
    );
  }
}