import { NextResponse } from "next/server";
import bcrypt from "bcrypt";
import jwt from "jsonwebtoken";
import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export async function POST(request: Request) {
    try {
        const body = await request.json();
        const { email, password } = body;

        // Validation des champs requis
        if (!email || !password) {
            return NextResponse.json(
                { error: "Email et mot de passe requis." },
                { status: 400 }
            );
        }

        // Validation du format email
        if (!/\S+@\S+\.\S+/.test(email)) {
            return NextResponse.json(
                { error: "Format d'email invalide." },
                { status: 400 }
            );
        }

        const user = await prisma.user.findUnique({ where: { email } });

        if (!user) {
            return NextResponse.json(
                { error: "Email ou mot de passe incorrect." }, // Message générique pour la sécurité
                { status: 401 }
            );
        }

        if (user.role !== "MANAGER") {
            return NextResponse.json(
                { error: "Accès réservé aux gestionnaires." },
                { status: 403 }
            );
        }

        const isPasswordValid = await bcrypt.compare(password, user.password);
        if (!isPasswordValid) {
            return NextResponse.json(
                { error: "Email ou mot de passe incorrect." }, // Message générique pour la sécurité
                { status: 401 }
            );
        }

        if (!process.env.JWT_SECRET) {
            console.error("JWT_SECRET n'est pas défini");
            return NextResponse.json(
                { error: "Erreur serveur." },
                { status: 500 }
            );
        }

        // Création du token JWT
        const token = jwt.sign(
            { id: user.id, email: user.email, role: user.role },
            process.env.JWT_SECRET,
            { expiresIn: "1d" }
        );

        // Ne renvoyez pas le mot de passe dans la réponse
        const { password: _, ...userWithoutPassword } = user;

        console.log('Connexion réussie pour', user.email, 'Token:', token);
        console.log('Réponse envoyée:', {
            user: userWithoutPassword,
            token,
            message: "Connexion réussie"
        });

        return NextResponse.json(
            {
                user: userWithoutPassword,
                token,
                message: "Connexion réussie"
            },
            { status: 200 }
        );
    } catch (error: any) {
        console.error("Erreur serveur:", error);
        return NextResponse.json(
            { error: "Une erreur est survenue. Veuillez réessayer." },
            { status: 500 }
        );
    }
}