/**
 * Debug Fix Script für MYP Platform
 * Temporäre Fehlerbehebung für JavaScript-Probleme
 */

(function() {
    'use strict';
    
    console.log('🔧 Debug Fix Script wird geladen...');
    
    // Namespace sicherstellen
    window.MYP = window.MYP || {};
    window.MYP.UI = window.MYP.UI || {};
    
    // MVP.UI Alias erstellen falls es fehlerhaft verwendet wird
    window.MVP = window.MVP || {};
    window.MVP.UI = window.MVP.UI || {};
    
    // Sofortiger Alias für DarkModeManager
    window.MVP.UI.DarkModeManager = function() {
        console.log('⚠️ MVP.UI.DarkModeManager Konstruktor aufgerufen - verwende MYP.UI.darkMode stattdessen');
        if (window.MYP && window.MYP.UI && window.MYP.UI.darkMode) {
            return window.MYP.UI.darkMode;
        }
        // Fallback: Dummy-Objekt zurückgeben
        return {
            init: function() { console.log('DarkModeManager Fallback init'); },
            setDarkMode: function() { console.log('DarkModeManager Fallback setDarkMode'); },
            isDarkMode: function() { return false; }
        };
    };
    
    // DOMContentLoaded Event abwarten
    document.addEventListener('DOMContentLoaded', function() {
        console.log('🚀 Debug Fix: DOM Content geladen');
        
        // Warten bis ui-components.js geladen ist
        setTimeout(() => {
            try {
                // MVP.UI DarkModeManager Alias aktualisieren
                if (window.MYP && window.MYP.UI && window.MYP.UI.darkMode) {
                    window.MVP.UI.DarkModeManager = function() {
                        console.log('⚠️ MVP.UI.DarkModeManager Konstruktor aufgerufen - verwende MYP.UI.darkMode stattdessen');
                        return window.MYP.UI.darkMode;
                    };
                    console.log('✅ MVP.UI.DarkModeManager Alias aktualisiert');
                }
                
                // JobManager sicherstellen
                if (!window.jobManager && window.JobManager) {
                    window.jobManager = new window.JobManager();
                    console.log('✅ JobManager Instanz erstellt');
                }
                
                // Fehlende setupFormHandlers Methode hinzufügen falls nötig
                if (window.jobManager && !window.jobManager.setupFormHandlers) {
                    window.jobManager.setupFormHandlers = function() {
                        console.log('✅ setupFormHandlers Fallback aufgerufen');
                    };
                }
                
                // Global verfügbare Wrapper-Funktionen erstellen
                window.refreshJobs = function() {
                    if (window.jobManager && window.jobManager.loadJobs) {
                        return window.jobManager.loadJobs();
                    } else {
                        console.warn('⚠️ JobManager nicht verfügbar - Seite wird neu geladen');
                        window.location.reload();
                    }
                };
                
                // Weitere globale Funktionen für Kompatibilität
                window.startJob = function(jobId) {
                    if (window.jobManager && window.jobManager.startJob) {
                        return window.jobManager.startJob(jobId);
                    }
                };
                
                window.pauseJob = function(jobId) {
                    if (window.jobManager && window.jobManager.pauseJob) {
                        return window.jobManager.pauseJob(jobId);
                    }
                };
                
                window.resumeJob = function(jobId) {
                    if (window.jobManager && window.jobManager.resumeJob) {
                        return window.jobManager.resumeJob(jobId);
                    }
                };
                
                window.deleteJob = function(jobId) {
                    if (window.jobManager && window.jobManager.deleteJob) {
                        return window.jobManager.deleteJob(jobId);
                    }
                };
                
                console.log('✅ Debug Fix Script erfolgreich angewendet');
                
            } catch (error) {
                console.error('❌ Debug Fix Fehler:', error);
            }
        }, 100);
    });
    
    // Error Handler für unbehandelte Fehler
    window.addEventListener('error', function(e) {
        // Bessere Fehler-Serialisierung
        const errorInfo = {
            message: e.message || 'Unbekannter Fehler',
            filename: e.filename || 'Unbekannte Datei',
            lineno: e.lineno || 0,
            colno: e.colno || 0,
            stack: e.error ? e.error.stack : 'Stack nicht verfügbar',
            type: e.error ? e.error.constructor.name : 'Unbekannter Typ'
        };
        
        console.error('🐛 JavaScript Error abgefangen:', JSON.stringify(errorInfo, null, 2));
        
        // Spezifische Fehlerbehebungen
        if (e.message.includes('MVP.UI.DarkModeManager is not a constructor')) {
            console.log('🔧 DarkModeManager Fehler erkannt - verwende MYP.UI.darkMode');
            e.preventDefault();
            return false;
        }
        
        if (e.message.includes('setupFormHandlers is not a function')) {
            console.log('🔧 setupFormHandlers Fehler erkannt - verwende Fallback');
            e.preventDefault();
            return false;
        }
        
        if (e.message.includes('refreshStats is not defined')) {
            console.log('🔧 refreshStats Fehler erkannt - lade global-refresh-functions.js');
            // Versuche, global-refresh-functions.js zu laden
            const script = document.createElement('script');
            script.src = '/static/js/global-refresh-functions.js';
            script.onload = function() {
                console.log('✅ global-refresh-functions.js nachgeladen');
            };
            document.head.appendChild(script);
            e.preventDefault();
            return false;
        }
        
        if (e.message.includes('Cannot read properties of undefined')) {
            console.log('🔧 Undefined Properties Fehler erkannt - ignoriert für Stabilität');
            e.preventDefault();
            return false;
        }
        
        if (e.message.includes('jobManager') || e.message.includes('JobManager')) {
            console.log('🔧 JobManager Fehler erkannt - verwende Fallback');
            e.preventDefault();
            return false;
        }
        
        if (e.message.includes('showToast is not defined')) {
            console.log('🔧 showToast Fehler erkannt - verwende Fallback');
            e.preventDefault();
            return false;
        }
    });
    
    // Promise rejection handler
    window.addEventListener('unhandledrejection', function(e) {
        console.error('🐛 Promise Rejection abgefangen:', e.reason);
        
        if (e.reason && e.reason.message && e.reason.message.includes('Jobs')) {
            console.log('🔧 Jobs-bezogener Promise Fehler - ignoriert');
            e.preventDefault();
        }
    });
    
    console.log('✅ Debug Fix Script bereit');
})(); 