import LivewireNotification from '../_class/LivewireNotification';
import FormCustomListener from '../_class/FormCustomListener';

// Inicializar notificaciones globales
const notification = new LivewireNotification();

// Inicializar listener para estadísticas de cache
new FormCustomListener({
    buttonSelectors: ['.btn-clear-cache', '.btn-reload-cache-stats']
});

// Inicializar listener para funciones de cache
new FormCustomListener({
    formSelector: '#cache-functions-card',
    buttonSelectors: ['.btn', '.btn-config-cache', '.btn-cache-routes'],
    callbacks: [
        null, // Callback por defecto para .btn
        (form, button) => {
            // Emitir notificación de carga
            notification.emitNotification({
                target: '#cache-functions-card .notification-container',
                message: 'Generando cache de configuraciones de Laravel...',
                type: 'warning'
            });

            // Generar cache de configuraciones mediante una petición AJAX
            fetch('/admin/cache/config/cache', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content')
                },
                body: JSON.stringify({})
            })
                .then(response => {
                    if (!response.ok) {
                        throw new Error('Error al generar el cache de configuraciones');
                    }
                    return response.json();
                })
                .then(() => {
                    // Emitir notificación de éxito con recarga diferida
                    notification.emitNotification({
                        target: '#cache-functions-card .notification-container',
                        message: 'Se ha cacheado la configuración de Laravel...',
                        type: 'success',
                        deferReload: true
                    });
                })
                .catch(error => {
                    // Emitir notificación de error
                    notification.emitNotification({
                        target: '#cache-functions-card .notification-container',
                        message: `Error: ${error.message}`,
                        type: 'danger'
                    });
                    console.error('Error al generar el cache:', error);
                });
        },
        (form, button) => {
            // Emitir notificación de carga
            notification.emitNotification({
                target: '#cache-functions-card .notification-container',
                message: 'Generando cache de rutas de Laravel...',
                type: 'warning'
            });

            // Recargar estadísticas de cache mediante una petición AJAX
            fetch('/admin/cache/route/cache', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content')
                }
            })
                .then(response => {
                    if (!response.ok) {
                        throw new Error('Error al recargar las estadísticas de cache');
                    }
                    return response.json();
                })
                .then(() => {
                    // Emitir notificación de éxito con recarga diferida
                    notification.emitNotification({
                        target: '#cache-functions-card .notification-container',
                        message: 'Se han cacheado las rutas de Laravel...',
                        type: 'success',
                        deferReload: true
                    });
                })
                .catch(error => {
                    // Emitir notificación de error
                    notification.emitNotification({
                        target: '#cache-functions-card .notification-container',
                        message: `Error: ${error.message}`,
                        type: 'danger'
                    });
                    console.error('Error al recargar las estadísticas:', error);
                });
        }
    ]
});
