import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
import { getToken } from 'next-auth/jwt';

// Define a qué rutas aplica el middleware
const PROTECTED_ROUTES = ["/dashboard", "/estudiante", "/profesores", "/profesor"];

export async function middleware(request: NextRequest) {
  const path = request.nextUrl.pathname;

  // 1. Verificar si la ruta actual necesita protección
  const isProtectedRoute = PROTECTED_ROUTES.some(route => path.startsWith(route));

  if (isProtectedRoute) {
    // Obtener el token de sesión usando Next-Auth
    const token = await getToken({ 
      req: request, 
      secret: process.env.NEXTAUTH_SECRET 
    });

    // Si no hay token de sesión, redirigir al login
    if (!token) {
      return NextResponse.redirect(new URL('/signin', request.url));
    }

    // Obtener el rol del token
    const role = token.role as string;

    // 2. Solo SUPERADMIN o ADMIN_COLEGIO pueden entrar a /dashboard
    if (path.startsWith("/dashboard") && role !== "SUPERADMIN" && role !== "ADMIN_COLEGIO") {
      if (role === "PROFESOR") return NextResponse.redirect(new URL('/profesor', request.url));
      return NextResponse.redirect(new URL('/estudiante', request.url));
    }

    // 3. Profesores pueden entrar a /profesor
    if (path.startsWith("/profesor") && role !== "PROFESOR" && role !== "SUPERADMIN" && role !== "ADMIN_COLEGIO") {
      return NextResponse.redirect(new URL('/estudiante', request.url));
    }

    // 4. Los estudiantes no pueden entrar a rutas de profesores
    if (role === "ESTUDIANTE" && path.startsWith("/profesores")) {
      return NextResponse.redirect(new URL('/estudiante', request.url));
    }
  }

  // Si todo está bien o la ruta es pública, continuar
  return NextResponse.next();
}

// Configurar el matcher para el middleware
export const config = {
  matcher: [
    '/dashboard/:path*',
    '/estudiante/:path*',
    '/profesores/:path*',
    '/profesor/:path*',
  ],
};