/**
 * MYP Platform - JavaScript Fehler Validierung und Überwachung
 * Überprüft die behobenen Fehler und aktiviert weitere Fallbacks bei Bedarf
 */

(function() {
    'use strict';
    
    console.log('🔍 JavaScript Fehlervalidierung wird gestartet...');
    
    /**
     * Validierung der showToast-Verfügbarkeit
     */
    function validateShowToast() {
        const testsPassed = [];
        
        // Test 1: Grundfunktion verfügbar
        if (typeof window.showToast === 'function') {
            testsPassed.push('✅ window.showToast ist verfügbar');
        } else {
            console.warn('⚠️ window.showToast nicht verfügbar - aktiviere Fallback');
            
            // Fallback aktivieren
            window.showToast = function(message, type = 'info', duration = 5000) {
                console.log(`🔧 Validation-Fallback showToast: [${type.toUpperCase()}] ${message}`);
                
                // Versuche MYP.UI.toast zu verwenden
                if (window.MYP && window.MYP.UI && window.MYP.UI.toast && window.MYP.UI.toast.show) {
                    window.MYP.UI.toast.show(message, type, duration);
                }
            };
            testsPassed.push('🔧 Fallback showToast aktiviert');
        }
        
        // Test 2: MYP.UI.toast verfügbar
        if (window.MYP && window.MYP.UI && window.MYP.UI.toast) {
            testsPassed.push('✅ MYP.UI.toast ist verfügbar');
        } else {
            testsPassed.push('⚠️ MYP.UI.toast noch nicht verfügbar (wird später geladen)');
        }
        
        return testsPassed;
    }
    
    /**
     * Validierung der Manager-Verfügbarkeit
     */
    function validateManagers() {
        const testsPassed = [];
        
        // JobManager-Test
        if (typeof window.jobManager !== 'undefined' && window.jobManager) {
            testsPassed.push('✅ window.jobManager ist verfügbar');
        } else if (typeof jobManager !== 'undefined' && jobManager) {
            testsPassed.push('✅ jobManager (global) ist verfügbar');
        } else {
            testsPassed.push('⚠️ JobManager nicht verfügbar - API-Fallback wird verwendet');
        }
        
        // Refresh-Funktionen Test
        if (typeof window.refreshJobs === 'function') {
            testsPassed.push('✅ refreshJobs-Funktion ist verfügbar');
        } else {
            testsPassed.push('❌ refreshJobs-Funktion fehlt');
        }
        
        if (typeof window.refreshStats === 'function') {
            testsPassed.push('✅ refreshStats-Funktion ist verfügbar');
        } else {
            testsPassed.push('❌ refreshStats-Funktion fehlt');
        }
        
        return testsPassed;
    }
    
    /**
     * API-Endpunkt Validierung
     */
    async function validateAPIEndpoints() {
        const testsPassed = [];
        const endpoints = [
            { url: '/api/stats', name: 'Statistiken' },
            { url: '/api/jobs', name: 'Jobs' }
        ];
        
        for (const endpoint of endpoints) {
            try {
                const response = await fetch(endpoint.url, {
                    method: 'HEAD', // Nur Header abrufen, kein Body
                    headers: {
                        'Content-Type': 'application/json'
                    }
                });
                
                if (response.ok || response.status === 405) { // 405 = Method Not Allowed ist OK
                    testsPassed.push(`✅ ${endpoint.name} API (${endpoint.url}) ist erreichbar`);
                } else {
                    testsPassed.push(`⚠️ ${endpoint.name} API (${endpoint.url}) antwortet mit Status ${response.status}`);
                }
            } catch (error) {
                testsPassed.push(`❌ ${endpoint.name} API (${endpoint.url}) nicht erreichbar: ${error.message}`);
            }
        }
        
        return testsPassed;
    }
    
    /**
     * DOM-Element Validierung
     */
    function validateDOMElements() {
        const testsPassed = [];
        const criticalElements = [
            'total-print-time',
            'completed-jobs-count',
            'total-material-used',
            'last-updated-time'
        ];
        
        criticalElements.forEach(elementId => {
            const element = document.getElementById(elementId);
            if (element) {
                testsPassed.push(`✅ Element #${elementId} gefunden`);
            } else {
                testsPassed.push(`⚠️ Element #${elementId} nicht gefunden`);
            }
        });
        
        // Container-Elemente
        const containers = [
            '.jobs-container',
            '#jobs-container', 
            '.job-grid',
            '#refresh-button'
        ];
        
        containers.forEach(selector => {
            const element = document.querySelector(selector);
            if (element) {
                testsPassed.push(`✅ Container ${selector} gefunden`);
            } else {
                testsPassed.push(`⚠️ Container ${selector} nicht gefunden`);
            }
        });
        
        return testsPassed;
    }
    
    /**
     * Error Handler Validierung
     */
    function validateErrorHandling() {
        const testsPassed = [];
        
        // Test ob unser error handler aktiv ist
        const testError = new Error('Validation Test Error');
        window.dispatchEvent(new ErrorEvent('error', {
            message: 'Test error for validation',
            filename: 'validation-fix.js',
            lineno: 1,
            error: testError
        }));
        
        testsPassed.push('✅ Error Handler Funktionalität getestet');
        
        return testsPassed;
    }
    
    /**
     * Vollständige Validierung durchführen
     */
    async function runCompleteValidation() {
        console.log('🔍 Starte vollständige JavaScript-Validierung...');
        
        const results = {
            showToast: validateShowToast(),
            managers: validateManagers(),
            domElements: validateDOMElements(),
            errorHandling: validateErrorHandling(),
            apiEndpoints: await validateAPIEndpoints()
        };
        
        // Ergebnisse ausgeben
        console.group('🔍 Validierungsergebnisse:');
        
        Object.keys(results).forEach(category => {
            console.group(`📋 ${category}:`);
            results[category].forEach(result => console.log(result));
            console.groupEnd();
        });
        
        console.groupEnd();
        
        // Zusammenfassung
        const allResults = Object.values(results).flat();
        const successCount = allResults.filter(r => r.startsWith('✅')).length;
        const warningCount = allResults.filter(r => r.startsWith('⚠️')).length;
        const errorCount = allResults.filter(r => r.startsWith('❌')).length;
        
        console.log(`📊 Validierung abgeschlossen: ${successCount} OK, ${warningCount} Warnungen, ${errorCount} Fehler`);
        
        // Status-Toast anzeigen
        if (typeof window.showToast === 'function') {
            if (errorCount === 0) {
                window.showToast(`✅ JavaScript-Validierung erfolgreich: ${successCount} Checks bestanden`, 'success');
            } else {
                window.showToast(`⚠️ JavaScript-Validierung: ${errorCount} Probleme gefunden`, 'warning');
            }
        }
        
        return results;
    }
    
    /**
     * Kontinuierliche Überwachung
     */
    function startContinuousMonitoring() {
        setInterval(() => {
            // Prüfe kritische Funktionen
            if (typeof window.showToast !== 'function') {
                console.warn('⚠️ showToast-Funktion verloren - reaktiviere Fallback');
                validateShowToast();
            }
            
            // Prüfe auf neue Fehler
            const errorElements = document.querySelectorAll('.text-red-500');
            if (errorElements.length > 0) {
                console.warn(`⚠️ ${errorElements.length} Fehler-Elemente gefunden`);
            }
        }, 30000); // Alle 30 Sekunden
    }
    
    // Globale Funktionen exportieren
    window.validateJavaScript = runCompleteValidation;
    window.validateShowToast = validateShowToast;
    
    // DOMContentLoaded abwarten und dann validieren
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', () => {
            setTimeout(runCompleteValidation, 2000); // 2 Sekunden warten
            startContinuousMonitoring();
        });
    } else {
        setTimeout(runCompleteValidation, 2000);
        startContinuousMonitoring();
    }
    
    console.log('✅ JavaScript Fehlervalidierung initialisiert');
})(); 