import { NextRequest, NextResponse } from "next/server";
import { getServerSession } from "next-auth";
import { authOptions } from "@/app/api/auth/authOptions";
import { prisma } from "@/lib/prisma";
import { encode } from "next-auth/jwt";
import { Role } from "@/types/types";

export async function POST(req: NextRequest) {
  try {
    // Vérifier la session actuelle
    const session = await getServerSession(authOptions);
    if (!session?.user) {
      return NextResponse.json(
        { error: "Session non valide" },
        { status: 401 }
      );
    }

    // Récupérer l'ID de l'admin original depuis les cookies
    const originalAdminId = req.cookies.get('original_admin_id')?.value;
    
    if (!originalAdminId) {
      return NextResponse.json(
        { error: "Aucune session d'administrateur trouvée" },
        { status: 400 }
      );
    }

    // Récupérer l'admin original
    const adminUser = await prisma.user.findUnique({
      where: { id: Number(originalAdminId) },
      select: {
        id: true,
        email: true,
        firstName: true,
        lastName: true,
        role: true,
      },
    });

    if (!adminUser || adminUser.role !== "ADMIN") {
      return NextResponse.json(
        { error: "Administrateur non trouvé" },
        { status: 404 }
      );
    }

    console.log(`Retour au compte admin: ${adminUser.email}`);

    // Créer un nouveau token pour l'admin
    const token = {
      name: `${adminUser.firstName} ${adminUser.lastName}`.trim(),
      email: adminUser.email,
      sub: adminUser.id.toString(),
      role: adminUser.role as Role,
      firstName: adminUser.firstName,
      lastName: adminUser.lastName,
      iat: Math.floor(Date.now() / 1000),
      exp: Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 30, // 30 jours
    };

    const secret = process.env.NEXTAUTH_SECRET;
    if (!secret) {
      throw new Error('NEXTAUTH_SECRET is not defined');
    }

    // Créer le token JWT
    const cookieValue = await encode({
      token: {
        ...token,
        id: adminUser.id.toString(),
      },
      secret: secret,
    });

    // Créer la réponse de redirection
    const redirectUrl = new URL('/admin-dashboard', req.nextUrl.origin);
    const response = NextResponse.redirect(redirectUrl);

    // Mettre à jour le cookie de session
    response.cookies.set({
      name: process.env.NODE_ENV === 'production' ? '__Secure-next-auth.session-token' : 'next-auth.session-token',
      value: cookieValue,
      httpOnly: true,
      secure: process.env.NODE_ENV === 'production',
      sameSite: 'lax',
      path: '/',
      maxAge: 60 * 60 * 24 * 30, // 30 jours
    });

    // Supprimer le cookie original_admin_id
    response.cookies.set({
      name: 'original_admin_id',
      value: '',
      httpOnly: true,
      secure: process.env.NODE_ENV === 'production',
      sameSite: 'lax',
      path: '/',
      maxAge: 0, // Supprimer le cookie
    });

    return response;
  } catch (error) {
    console.error("Erreur lors du retour à l'admin:", error);
    return NextResponse.json(
      { error: "Une erreur est survenue" },
      { status: 500 }
    );
  }
}
