import pool from "@/lib/db";
import { getSession } from "@/lib/auth";
import { NextResponse } from "next/server";

export async function GET(
    request: Request,
    { params }: { params: Promise<{ id: string }> }
) {
    try {
        const session = await getSession();
        if (!session || session.user.tipo_acceso !== 1) {
            return NextResponse.json({ message: "No autorizado" }, { status: 401 });
        }

        const { id } = await params;

        const [modulos]: any = await pool.execute("SELECT * FROM modulos");
        const [permisos]: any = await pool.execute(
            "SELECT id_modulo, puede_entrar FROM permisos WHERE id_empleado = ?",
            [id]
        );

        const permsMap = new Map(permisos.map((p: any) => [p.id_modulo, p.puede_entrar]));

        const result = modulos.map((m: any) => ({
            ...m,
            puede_entrar: permsMap.has(m.id) ? !!permsMap.get(m.id) : false
        }));

        return NextResponse.json(result);
    } catch (error) {
        console.error("Error fetching permissions:", error);
        return NextResponse.json({ message: "Error interno" }, { status: 500 });
    }
}

export async function POST(
    request: Request,
    { params }: { params: Promise<{ id: string }> }
) {
    try {
        const session = await getSession();
        if (!session || session.user.tipo_acceso !== 1) {
            return NextResponse.json({ message: "No autorizado" }, { status: 401 });
        }

        const { id } = await params;
        const { id_modulo, puede_entrar } = await request.json();

        await pool.execute(
            "INSERT INTO permisos (id_empleado, id_modulo, puede_entrar) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE puede_entrar = ?",
            [id, id_modulo, puede_entrar, puede_entrar]
        );

        return NextResponse.json({ message: "Permiso actualizado" });
    } catch (error) {
        console.error("Error updating permission:", error);
        return NextResponse.json({ message: "Error interno" }, { status: 500 });
    }
}
