/**
 * Jobs Safety Fix - Mercedes-Benz MYP Platform
 * Umfassende Lösung für "jobs undefined" Probleme
 * Version: 1.0.0
 */

(function() {
    'use strict';
    
    console.log('🛡️ Jobs Safety Fix wird geladen...');
    
    /**
     * Globale Jobs-Variable sicher initialisieren
     */
    if (typeof window.jobsData === 'undefined') {
        window.jobsData = [];
    }
    
    if (typeof window.filteredJobs === 'undefined') {
        window.filteredJobs = [];
    }
    
    /**
     * Sichere Jobs-Funktionen
     */
    window.safeJobsOperations = {
        /**
         * Jobs sicher abrufen
         */
        getJobs: function() {
            if (window.jobManager && Array.isArray(window.jobManager.jobs)) {
                return window.jobManager.jobs;
            }
            if (Array.isArray(window.jobsData)) {
                return window.jobsData;
            }
            return [];
        },
        
        /**
         * Gefilterte Jobs sicher abrufen
         */
        getFilteredJobs: function() {
            if (Array.isArray(window.filteredJobs)) {
                return window.filteredJobs;
            }
            return this.getJobs();
        },
        
        /**
         * Jobs sicher setzen
         */
        setJobs: function(jobs) {
            if (!Array.isArray(jobs)) {
                console.warn('⚠️ Jobs ist kein Array, konvertiere zu leerem Array');
                jobs = [];
            }
            
            if (window.jobManager) {
                window.jobManager.jobs = jobs;
            }
            window.jobsData = jobs;
            
            console.log(`✅ ${jobs.length} Jobs sicher gesetzt`);
        },
        
        /**
         * Job sicher finden
         */
        findJob: function(jobId) {
            const jobs = this.getJobs();
            return jobs.find(job => job && job.id && job.id.toString() === jobId.toString()) || null;
        },
        
        /**
         * Jobs sicher filtern
         */
        filterJobs: function(filterFn) {
            const jobs = this.getJobs();
            if (typeof filterFn !== 'function') {
                return jobs;
            }
            
            try {
                return jobs.filter(job => {
                    if (!job || typeof job !== 'object') {
                        return false;
                    }
                    return filterFn(job);
                });
            } catch (error) {
                console.error('❌ Fehler beim Filtern der Jobs:', error);
                return jobs;
            }
        }
    };
    
    /**
     * JobManager Sicherheitsprüfungen
     */
    function ensureJobManagerSafety() {
        if (typeof window.jobManager !== 'undefined' && window.jobManager) {
            // Sicherstellen, dass jobs ein Array ist
            if (!Array.isArray(window.jobManager.jobs)) {
                console.warn('⚠️ JobManager.jobs ist kein Array, korrigiere...');
                window.jobManager.jobs = [];
            }
            
            // Originale loadJobs Methode wrappen
            if (window.jobManager.loadJobs && typeof window.jobManager.loadJobs === 'function') {
                const originalLoadJobs = window.jobManager.loadJobs;
                window.jobManager.loadJobs = async function(...args) {
                    try {
                        await originalLoadJobs.apply(this, args);
                        // Nach dem Laden sicherstellen, dass jobs ein Array ist
                        if (!Array.isArray(this.jobs)) {
                            this.jobs = [];
                        }
                    } catch (error) {
                        console.error('❌ Fehler beim sicheren Laden der Jobs:', error);
                        this.jobs = [];
                        throw error;
                    }
                };
            }
            
            // Originale renderJobs Methode wrappen
            if (window.jobManager.renderJobs && typeof window.jobManager.renderJobs === 'function') {
                const originalRenderJobs = window.jobManager.renderJobs;
                window.jobManager.renderJobs = function(...args) {
                    try {
                        // Sicherstellen, dass jobs ein Array ist vor dem Rendern
                        if (!Array.isArray(this.jobs)) {
                            console.warn('⚠️ Jobs ist kein Array vor dem Rendern, korrigiere...');
                            this.jobs = [];
                        }
                        return originalRenderJobs.apply(this, args);
                    } catch (error) {
                        console.error('❌ Fehler beim sicheren Rendern der Jobs:', error);
                        // Fallback-Rendering
                        const jobsList = document.getElementById('jobs-list');
                        if (jobsList) {
                            jobsList.innerHTML = `
                                <div class="text-center py-12">
                                    <div class="text-red-400 dark:text-red-600 text-6xl mb-4">⚠️</div>
                                    <h3 class="text-lg font-medium text-gray-900 dark:text-white mb-2">Renderingfehler</h3>
                                    <p class="text-gray-500 dark:text-gray-400 mb-4">Jobs konnten nicht angezeigt werden</p>
                                    <button onclick="window.jobManager.loadJobs()" class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700">
                                        Erneut laden
                                    </button>
                                </div>
                            `;
                        }
                    }
                };
            }
        }
    }
    
    /**
     * Globale Variablen-Überwachung
     */
    function setupGlobalVariableWatching() {
        // jobsData überwachen
        let _jobsData = [];
        Object.defineProperty(window, 'jobsData', {
            get: function() {
                return _jobsData;
            },
            set: function(value) {
                if (!Array.isArray(value)) {
                    console.warn('⚠️ Versuche jobsData mit Non-Array zu setzen:', value);
                    _jobsData = [];
                } else {
                    _jobsData = value;
                }
            },
            enumerable: true,
            configurable: true
        });
        
        // filteredJobs überwachen
        let _filteredJobs = [];
        Object.defineProperty(window, 'filteredJobs', {
            get: function() {
                return _filteredJobs;
            },
            set: function(value) {
                if (!Array.isArray(value)) {
                    console.warn('⚠️ Versuche filteredJobs mit Non-Array zu setzen:', value);
                    _filteredJobs = [];
                } else {
                    _filteredJobs = value;
                }
            },
            enumerable: true,
            configurable: true
        });
    }
    
    /**
     * API-Response Validator
     */
    window.validateJobsResponse = function(data) {
        if (!data || typeof data !== 'object') {
            console.warn('⚠️ Ungültige API-Response:', data);
            return { jobs: [], total: 0 };
        }
        
        let jobs = [];
        
        // Verschiedene Response-Formate unterstützen
        if (Array.isArray(data.jobs)) {
            jobs = data.jobs;
        } else if (Array.isArray(data.data)) {
            jobs = data.data;
        } else if (Array.isArray(data)) {
            jobs = data;
        } else if (data.success && Array.isArray(data.jobs)) {
            jobs = data.jobs;
        }
        
        // Jobs validieren
        jobs = jobs.filter(job => {
            if (!job || typeof job !== 'object') {
                console.warn('⚠️ Ungültiges Job-Objekt gefiltert:', job);
                return false;
            }
            if (!job.id) {
                console.warn('⚠️ Job ohne ID gefiltert:', job);
                return false;
            }
            return true;
        });
        
        console.log(`✅ ${jobs.length} Jobs validiert`);
        return {
            jobs: jobs,
            total: jobs.length,
            current_page: data.current_page || 1,
            total_pages: data.total_pages || 1
        };
    };
    
    /**
     * Fehlerbehandlung für undefined Jobs
     */
    window.addEventListener('error', function(e) {
        if (e.message && e.message.includes('jobs') && e.message.includes('undefined')) {
            console.log('🛡️ Jobs undefined Fehler abgefangen:', e.message);
            
            // Versuche Jobs zu reparieren
            window.safeJobsOperations.setJobs([]);
            
            e.preventDefault();
            return false;
        }
    });
    
    /**
     * Promise rejection handler für Jobs
     */
    window.addEventListener('unhandledrejection', function(e) {
        if (e.reason && e.reason.message && e.reason.message.includes('jobs')) {
            console.log('🛡️ Jobs Promise rejection abgefangen:', e.reason);
            
            // Versuche Jobs zu reparieren
            window.safeJobsOperations.setJobs([]);
            
            e.preventDefault();
        }
    });
    
    /**
     * DOM bereit - Setup starten
     */
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', function() {
            setupGlobalVariableWatching();
            ensureJobManagerSafety();
        });
    } else {
        setupGlobalVariableWatching();
        ensureJobManagerSafety();
    }
    
    /**
     * Periodische Sicherheitsprüfung
     */
    setInterval(function() {
        ensureJobManagerSafety();
        
        // Prüfe ob globale Jobs-Variablen noch Arrays sind
        if (!Array.isArray(window.jobsData)) {
            console.warn('⚠️ jobsData ist kein Array mehr, repariere...');
            window.jobsData = [];
        }
        
        if (!Array.isArray(window.filteredJobs)) {
            console.warn('⚠️ filteredJobs ist kein Array mehr, repariere...');
            window.filteredJobs = [];
        }
    }, 10000); // Alle 10 Sekunden
    
    console.log('✅ Jobs Safety Fix erfolgreich geladen');
    
})(); 