<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>{{ config('app.name', 'Laravel') }}</title>

    <!-- Scripts -->
    <script src="{{ asset('js/app.js') }}" defer></script>

    <!-- Fonts -->
    <link rel="dns-prefetch" href="//fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">

    <!-- Styles -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
    <div id="app">
        <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
            <div class="container">
                <a class="navbar-brand" href="{{ url('/') }}">
                    {{ config('app.name', 'Laravel') }}
                </a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
                    <span class="navbar-toggler-icon"></span>
                </button>

                <div class="collapse navbar-collapse" id="navbarSupportedContent">
                    <!-- Left Side Of Navbar -->
                    <ul class="navbar-nav me-auto">

                    </ul>

                    <!-- Right Side Of Navbar -->
                    <ul class="navbar-nav ms-auto">
                        <!-- Authentication Links -->
                        @guest
                            @if (Route::has('login'))
                                <li class="nav-item">
                                    <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
                                </li>
                            @endif

                            @if (Route::has('register'))
                                <li class="nav-item">
                                    <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
                                </li>
                            @endif
                        @else
                            <li class="nav-item dropdown">
                                <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
                                    {{ Auth::user()->name }}
                                </a>

                                <div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
                                    <a class="dropdown-item" href="{{ route('logout') }}"
                                       onclick="event.preventDefault();
                                                     document.getElementById('logout-form').submit();">
                                        {{ __('Logout') }}
                                    </a>

                                    <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
                                        @csrf
                                    </form>
                                </div>
                            </li>
                        @endguest
                    </ul>
                </div>
            </div>
        </nav>

        <main class="py-4">
            @yield('content')
        </main>
    </div>

    <!-- Scripts de la aplicación -->
    @yield('scripts')
    
    <!-- Modal de Alerta de Conexión -->
    <div class="modal fade" id="connectionAlertModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="connectionAlertModalLabel" aria-hidden="true">
        <div class="modal-dialog modal-dialog-centered">
            <div class="modal-content">
                <div class="modal-header bg-danger text-white">
                    <h5 class="modal-title" id="connectionAlertModalLabel">
                        <i class="bi bi-wifi-off me-2"></i>Sin conexión a Internet
                    </h5>
                </div>
                <div class="modal-body">
                    <div class="text-center mb-4">
                        <i class="bi bi-globe-americas fs-1 text-secondary mb-3"></i>
                        <p class="lead">Se ha perdido la conexión a Internet.</p>
                        <p>El sistema requiere una conexión activa para funcionar correctamente. Por favor verifique su conexión a Internet e intente nuevamente.</p>
                    </div>
                    <div class="d-flex justify-content-center">
                        <div class="spinner-border text-primary me-2" role="status">
                            <span class="visually-hidden">Verificando...</span>
                        </div>
                        <span>Verificando conexión...</span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Script para detectar la conexión a Internet -->
    <script>
        // Variables para el manejo del modal y temporizadores
        const connectionModal = new bootstrap.Modal(document.getElementById('connectionAlertModal'), {
            backdrop: 'static',
            keyboard: false
        });
        let connectionTimeout;
        let pingInterval;
        
        // Función para verificar la conexión haciendo una petición mínima
        function checkConnection() {
            return fetch('/favicon.ico', { 
                method: 'HEAD',
                cache: 'no-store',
                mode: 'no-cors',
                timeout: 5000 
            })
            .then(() => true)
            .catch(() => false);
        }
        
        // Manejador cuando se detecta pérdida de conexión
        async function handleOffline() {
            // Limpiar temporizadores existentes
            clearTimeout(connectionTimeout);
            clearInterval(pingInterval);
            
            // Mostrar modal
            connectionModal.show();
            
            // Iniciar verificación periódica de conexión
            pingInterval = setInterval(async () => {
                const isConnected = await checkConnection();
                if (isConnected) {
                    handleOnline();
                }
            }, 5000); // Verificar cada 5 segundos
        }
        
        // Manejador cuando se restaura la conexión
        function handleOnline() {
            // Limpiar verificación periódica
            clearInterval(pingInterval);
            
            // Cerrar modal
            connectionModal.hide();
            
            // Mostrar notificación de reconexión
            const toast = document.createElement('div');
            toast.className = 'position-fixed bottom-0 end-0 p-3';
            toast.style.zIndex = '9999';
            toast.innerHTML = `
                <div class="toast show" role="alert" aria-live="assertive" aria-atomic="true">
                    <div class="toast-header bg-success text-white">
                        <i class="bi bi-wifi me-2"></i>
                        <strong class="me-auto">Conexión restaurada</strong>
                        <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
                    </div>
                    <div class="toast-body">
                        La conexión a Internet ha sido restablecida.
                    </div>
                </div>
            `;
            document.body.appendChild(toast);
            
            // Eliminar toast después de 3 segundos
            setTimeout(() => {
                toast.remove();
            }, 3000);
        }
        
        // Verificación proactiva al cargar la página
        window.addEventListener('load', async () => {
            const isConnected = await checkConnection();
            if (!isConnected) {
                handleOffline();
            }
        });
        
        // Escuchar eventos nativos de conexión/desconexión
        window.addEventListener('offline', () => {
            // Esperar un momento para confirmar que realmente se perdió la conexión
            connectionTimeout = setTimeout(async () => {
                const isConnected = await checkConnection();
                if (!isConnected) {
                    handleOffline();
                }
            }, 1500);
        });
        
        window.addEventListener('online', async () => {
            clearTimeout(connectionTimeout);
            // Verificar que realmente hay conexión
            const isConnected = await checkConnection();
            if (isConnected) {
                handleOnline();
            }
        });
        
        // Verificación periódica adicional (cada 30 segundos)
        setInterval(async () => {
            const isConnected = await checkConnection();
            if (!isConnected) {
                handleOffline();
            }
        }, 30000);
    </script>

<x-ai-chat-widget />
</body>
</html>
