<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\View;

class MenuController extends Controller
{
    public function index()
    {
        // 🔐 Obtener rol (con fallback para pruebas)
        $user = Auth::user();
        $rol = $user->rol_id ?? 1;

        // 📊 Consulta
        $menus = DB::select("
            SELECT m.*
            FROM menus m
            INNER JOIN role_menu rm ON rm.menu_id = m.id
            WHERE rm.rol_id = ?
            AND m.activo = 1
            ORDER BY m.parent_id, m.orden
        ", [$rol]);

        // 🧩 Separar padres e hijos
        $padres = [];
        $hijos = [];

        foreach ($menus as $menu) {
            if ($menu->parent_id == null) {
                $padres[] = $menu;
            } else {
                $hijos[$menu->parent_id][] = $menu;
            }
        }

        // 📤 Retornar vista principal del dashboard
        return view('dashboard', compact('padres', 'hijos'));
    }

    /**
     * Devuelve el contenido de un item del menú para abrirlo en un tab.
     * GET /menu/vista/{key}
     */
    public function vista(Request $request, string $key)
    {
        $user = Auth::user();
        $rol = $user->rol_id ?? 1;

        // Se valida que el item exista, esté activo Y que el rol actual tenga permiso sobre él
        // (nunca se arma una ruta de archivo a partir de lo que llega en la URL)
        $item = DB::selectOne("
            SELECT m.tab_key, m.titulo, m.tipo, m.contenido
            FROM menus m
            INNER JOIN role_menu rm ON rm.menu_id = m.id
            WHERE m.tab_key = ? AND rm.rol_id = ? AND m.activo = 1
        ", [$key, $rol]);

        if (!$item) {
            return response()->json(['error' => 'Opción de menú no encontrada o sin permiso'], 404);
        }

        if ($item->tipo === 'iframe') {
            return response()->json([
                'tipo'   => 'iframe',
                'url'    => $item->contenido,
                'titulo' => $item->titulo,
            ]);
        }

        // tipo = 'vista' -> "contenido" es el nombre de una vista Blade dentro de resources/views/menu-content
        // ej: contenido = "inventario.productos"  ->  resources/views/menu-content/inventario/productos.blade.php
        $vista = 'menu-content.' . $item->contenido;

        if (!View::exists($vista)) {
            return response()->json([
                'error'    => 'La vista Blade no existe',
                'esperado' => 'resources/views/' . str_replace('.', '/', $vista) . '.blade.php',
            ], 404);
        }

        return response()->json([
            'tipo'   => 'vista',
            'html'   => view($vista)->render(),
            'titulo' => $item->titulo,
        ]);
    }
}
