// === WEBSOCKET LOGGER ===
// Envoie les logs vers le serveur WebSocket de ton système

console.log('🔧 WebSocket Logger chargé');

// Variables globales
window.wsLogger = null;
window.logQueue = [];
window.isConnected = false;

// Fonction pour se connecter au serveur WebSocket
function connectToLogServer() {
    // Désactiver WebSocket en mode file://
    if (window.location.protocol === 'file:') {
        console.log('📁 Mode file:// détecté - WebSocket désactivé');
        return;
    }

    try {
        console.log('🔌 Tentative de connexion WebSocket sur ws://localhost:8082...');
        window.wsLogger = new WebSocket('ws://localhost:8082');

        window.wsLogger.onopen = function() {
            console.log('✅ Connecté au serveur de logs WebSocket');
            window.isConnected = true;

            // Log de confirmation
            window.logSh('🎉 WebSocket Logger connecté avec succès!', 'INFO');
            window.logSh(`📊 ${window.logQueue.length} logs en attente dans la queue`, 'DEBUG');

            // Vider la queue des logs en attente
            let sentCount = 0;
            while (window.logQueue.length > 0) {
                const logData = window.logQueue.shift();
                window.wsLogger.send(JSON.stringify(logData));
                sentCount++;
            }

            if (sentCount > 0) {
                window.logSh(`📤 ${sentCount} logs en attente envoyés au serveur`, 'INFO');
            }
        };

        window.wsLogger.onclose = function() {
            console.log('❌ Connexion WebSocket fermée');
            window.isConnected = false;

            // Tentative de reconnexion après 3 secondes
            setTimeout(connectToLogServer, 3000);
        };

        window.wsLogger.onerror = function(error) {
            console.log('❌ Erreur WebSocket:', error);
            window.isConnected = false;
        };

    } catch (error) {
        console.log('❌ Impossible de se connecter au serveur de logs:', error);
        setTimeout(connectToLogServer, 5000);
    }
}

// Fonction logSh qui envoie au WebSocket
window.logSh = function(message, level = 'INFO') {
    // Sécuriser le level pour éviter les erreurs
    if (typeof level !== 'string') {
        level = 'INFO';
    }

    const timestamp = new Date().toISOString();
    const logData = {
        timestamp: timestamp,
        level: level.toUpperCase(),
        message: message
    };

    // Log aussi dans la console pour backup
    const color = level === 'ERROR' ? 'color: red' :
                 level === 'WARN' ? 'color: orange' :
                 level === 'DEBUG' ? 'color: blue' : 'color: green';
    console.log(`%c[${new Date().toLocaleTimeString()}] ${level}: ${message}`, color);

    // Envoyer au WebSocket (seulement si pas en mode file://)
    if (window.location.protocol !== 'file:') {
        if (window.isConnected && window.wsLogger) {
            try {
                window.wsLogger.send(JSON.stringify(logData));
            } catch (error) {
                // Si erreur d'envoi, mettre en queue
                window.logQueue.push(logData);
            }
        } else {
            // Pas connecté, mettre en queue
            window.logQueue.push(logData);

            // Limiter la queue à 100 messages
            if (window.logQueue.length > 100) {
                window.logQueue.shift();
            }
        }
    }
    // En mode file://, on log seulement dans la console (pas de WebSocket)
};

// Fonctions de convenance
window.logTrace = function(message) { window.logSh(message, 'TRACE'); };
window.logDebug = function(message) { window.logSh(message, 'DEBUG'); };
window.logInfo = function(message) { window.logSh(message, 'INFO'); };
window.logWarn = function(message) { window.logSh(message, 'WARN'); };
window.logError = function(message) { window.logSh(message, 'ERROR'); };

// Bouton pour ouvrir l'interface de logs
window.openLogsInterface = function() {
    // Utiliser un chemin relatif pour fonctionner avec file://
    const currentPath = window.location.pathname;
    const basePath = currentPath.substring(0, currentPath.lastIndexOf('/'));
    const logsUrl = window.location.protocol + '//' + window.location.host + basePath + '/export_logger/logs-viewer.html';
    window.open(logsUrl, 'LogsViewer', 'width=1200,height=800,scrollbars=yes,resizable=yes');
};

// Initialisation (seulement si pas en mode file://)
if (window.location.protocol !== 'file:') {
    connectToLogServer();
} else {
    console.log('📁 Mode file:// - WebSocket Logger désactivé');
}

// Test initial
window.logSh('🚀 WebSocket Logger initialisé', 'INFO');

console.log('✅ WebSocket Logger prêt - logs envoyés vers ws://localhost:8082');