import pool from "@/lib/db";
import { encrypt } from "@/lib/auth";
import { cookies } from "next/headers";
import { NextResponse } from "next/server";

export async function POST(request: Request) {
    try {
        const { usuario, password } = await request.json();

        const [rows]: any = await pool.execute(
            "SELECT id, nombre, usuario, activo, tipo_acceso FROM empleados WHERE usuario = ? AND password = ?",
            [usuario, password]
        );

        if (rows.length === 0) {
            return NextResponse.json(
                { message: "Credenciales inválidas" },
                { status: 401 }
            );
        }

        const user = rows[0];

        if (user.activo !== 1) {
            return NextResponse.json(
                { message: "Usuario inactivo" },
                { status: 403 }
            );
        }

        // Obtener permisos específicos del usuario
        const [permisos]: any = await pool.execute(
            "SELECT m.nombre FROM permisos p JOIN modulos m ON p.id_modulo = m.id WHERE p.id_empleado = ? AND p.puede_entrar = 1",
            [user.id]
        );
        const userPerms = permisos.map((p: any) => p.nombre);

        // Crear sesión
        const expires = new Date(Date.now() + 2 * 60 * 60 * 1000); // 2 horas
        const session = await encrypt({
            user: {
                id: user.id,
                nombre: user.nombre,
                tipo_acceso: user.tipo_acceso,
                permisos: userPerms,
            },
            expires,
        });

        const cookieStore = await cookies();
        cookieStore.set("session", session, { expires, httpOnly: true });

        return NextResponse.json({
            user: {
                nombre: user.nombre,
                tipo_acceso: user.tipo_acceso,
            },
        });
    } catch (error) {
        console.error("Login error:", error);
        return NextResponse.json(
            { message: "Error interno del servidor" },
            { status: 500 }
        );
    }
}
