/**
 * Automaatse väljalogimise süsteem - TÄIUSTATUD VERSIOON
 * 🔧 LISATUD: Serveri sessiooni kontroll
 * 🔧 LISATUD: check-session.php API integratsioon
 */

class AutoLogout {
    constructor(options = {}) {
        this.timeoutMinutes = options.timeoutMinutes || 30; // 30 minutit vaikimisi
        this.warningMinutes = options.warningMinutes || 5;  // 5 minutit enne hoiatus
        this.checkInterval = options.checkInterval || 60000; // Kontrolli iga minut
        this.serverCheckInterval = options.serverCheckInterval || 300000; // Server kontroll iga 5 min
        
        this.timeoutMs = this.timeoutMinutes * 60 * 1000;
        this.warningMs = this.warningMinutes * 60 * 1000;
        
        this.lastActivity = Date.now();
        this.warningShown = false;
        this.logoutTimer = null;
        this.checkTimer = null;
        this.serverCheckTimer = null;
        this.warningModal = null;
        
        // API URL
        this.apiUrl = this.getApiUrl();
        
        this.init();
    }
    
    init() {
        // Jälgi kasutaja aktiivsust
        this.bindActivityEvents();
        
        // Käivita perioodiline kontroll
        this.startChecking();
        
        // 🆕 UUS: Käivita serveri kontroll
        this.startServerChecking();
        
        // Loo hoiatuse modal
        this.createWarningModal();
        
        console.log(`🔒 Auto-logout aktiveeritud: ${this.timeoutMinutes}min timeout, server check iga ${this.serverCheckInterval/60000}min`);
    }
    
    getApiUrl() {
        // Leia õige API URL
        const currentPath = window.location.pathname;
        const basePath = currentPath.includes('/ratsaklubi.estreka') ? '/ratsaklubi.estreka' : '';
        return window.location.origin + basePath + '/api/check-session.php';
    }
    
    bindActivityEvents() {
        const events = [
            'mousedown', 'mousemove', 'keypress', 'scroll', 
            'touchstart', 'touchmove', 'click', 'keydown'
        ];
        
        const resetActivity = () => {
            this.resetActivity();
        };
        
        // Lisa event listenerid
        events.forEach(event => {
            document.addEventListener(event, resetActivity, true);
        });
        
        // Jälgi ka AJAX päringuid (kui jQuery on saadaval)
        if (typeof $ !== 'undefined') {
            $(document).ajaxSend(resetActivity);
        }
        
        // Jälgi fetch päringuid
        const originalFetch = window.fetch;
        window.fetch = (...args) => {
            resetActivity();
            return originalFetch(...args);
        };
    }
    
    resetActivity() {
        this.lastActivity = Date.now();
        
        // Peida hoiatus kui see on nähtav
        if (this.warningShown) {
            this.hideWarning();
        }
    }
    
    startChecking() {
        this.checkTimer = setInterval(() => {
            this.checkActivity();
        }, this.checkInterval);
    }
    
    // 🆕 UUS: Serveri sessiooni kontroll
    startServerChecking() {
        // Kohe esimene kontroll
        setTimeout(() => {
            this.checkServerSession();
        }, 5000); // 5 sek pärast lehe laadimist
        
        // Regulaarne kontroll
        this.serverCheckTimer = setInterval(() => {
            this.checkServerSession();
        }, this.serverCheckInterval);
    }
    
    // 🆕 UUS: Kontrolli serveri sessioon
    async checkServerSession() {
        try {
            console.log('🔍 Kontrollime serveri sessiooni...');
            
            const response = await fetch(this.apiUrl, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'X-Requested-With': 'XMLHttpRequest'
                },
                credentials: 'same-origin' // Saada cookies kaasa
            });
            
            if (!response.ok) {
                throw new Error(`HTTP ${response.status}`);
            }
            
            const data = await response.json();
            
            if (data.valid) {
                console.log('✅ Serveri sessioon kehtiv:', data.user_name);
                
                // Uuenda sessiooni infot
                if (data.last_activity) {
                    // Võime kasutada serveri aktiivsust
                    this.lastServerActivity = data.last_activity * 1000; // Convert to ms
                }
                
                // Kontrolli auto-logout seadeid
                if (data.security && data.security.auto_logout_enabled === false) {
                    console.log('ℹ️ Auto-logout on administratoori poolt välja lülitatud');
                    this.destroy();
                    return;
                }
                
            } else {
                console.warn('❌ Serveri sessioon kehtetu:', data.error);
                
                // Sessioon pole kehtiv - logi kohe välja
                this.performServerLogout(data.error);
                return;
            }
            
        } catch (error) {
            console.error('🚨 Serveri sessiooni kontroll ebaõnnestus:', error);
            
            // Võrgu vea korral ära kohe välja logi - võib olla lühiajaline probleem
            // Logi ainult kui mitu järjestikust viga
            this.serverCheckErrors = (this.serverCheckErrors || 0) + 1;
            
            if (this.serverCheckErrors >= 3) {
                console.warn('🚨 Liiga palju serveri kontrollimise vigu - logime välja');
                this.performServerLogout('Serveri ühenduse probleem');
            }
        }
    }
    
    checkActivity() {
        const now = Date.now();
        const timeSinceActivity = now - this.lastActivity;
        const timeUntilLogout = this.timeoutMs - timeSinceActivity;
        
        // Kontroll: kas on aeg välja logida?
        if (timeSinceActivity >= this.timeoutMs) {
            this.performLogout('Timeout - kasutaja passiivsus');
            return;
        }
        
        // Kontroll: kas näidata hoiatust?
        if (timeUntilLogout <= this.warningMs && !this.warningShown) {
            this.showWarning(Math.ceil(timeUntilLogout / 1000));
        }
        
        // Uuenda hoiatuse taimerit
        if (this.warningShown) {
            this.updateWarningTimer(Math.ceil(timeUntilLogout / 1000));
        }
    }
    
    createWarningModal() {
        // Loo modal HTML
        const modalHTML = `
            <div id="autoLogoutModal" class="logout-modal" style="display: none;">
                <div class="logout-modal-overlay">
                    <div class="logout-modal-content">
                        <div class="logout-modal-header">
                            <h3>⏰ Sessioon aegub</h3>
                        </div>
                        <div class="logout-modal-body">
                            <div class="logout-icon">
                                <span class="logout-icon-clock">🕐</span>
                            </div>
                            <p>Sinu sessioon aegub passiivsuse tõttu.</p>
                            <p>Logitakse välja <strong><span id="logoutTimer">0</span> sekundi</strong> pärast.</p>
                        </div>
                        <div class="logout-modal-actions">
                            <button id="stayLoggedBtn" class="btn btn-primary">
                                <span class="btn-icon">👤</span>
                                Jätka sessiooni
                            </button>
                            <button id="logoutNowBtn" class="btn btn-secondary">
                                <span class="btn-icon">🚪</span>
                                Logi kohe välja
                            </button>
                        </div>
                    </div>
                </div>
            </div>
        `;
        
        // Lisa CSS
        const styles = `
            <style id="autoLogoutStyles">
            .logout-modal {
                position: fixed;
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
                z-index: 10000;
                display: flex;
                align-items: center;
                justify-content: center;
            }
            
            .logout-modal-overlay {
                position: absolute;
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
                background: rgba(0, 0, 0, 0.7);
                backdrop-filter: blur(4px);
            }
            
            .logout-modal-content {
                background: white;
                border-radius: 12px;
                box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
                max-width: 400px;
                width: 90%;
                position: relative;
                z-index: 1;
                overflow: hidden;
                animation: slideInScale 0.3s ease-out;
            }
            
            @keyframes slideInScale {
                from {
                    opacity: 0;
                    transform: scale(0.9) translateY(-20px);
                }
                to {
                    opacity: 1;
                    transform: scale(1) translateY(0);
                }
            }
            
            .logout-modal-header {
                background: linear-gradient(135deg, #f59e0b, #d97706);
                color: white;
                padding: 20px;
                text-align: center;
            }
            
            .logout-modal-header h3 {
                margin: 0;
                font-size: 18px;
                font-weight: 600;
            }
            
            .logout-modal-body {
                padding: 30px 20px;
                text-align: center;
            }
            
            .logout-icon {
                width: 60px;
                height: 60px;
                background: linear-gradient(135deg, #f59e0b, #d97706);
                color: white;
                border-radius: 50%;
                display: flex;
                align-items: center;
                justify-content: center;
                font-size: 24px;
                margin: 0 auto 20px;
                animation: pulse 2s infinite;
            }
            
            .logout-icon-clock {
                font-size: 24px;
            }
            
            .logout-loading-spinner {
                animation: spin 1s linear infinite;
                font-size: 24px;
            }
            
            @keyframes pulse {
                0%, 100% { transform: scale(1); }
                50% { transform: scale(1.05); }
            }
            
            @keyframes spin {
                from { transform: rotate(0deg); }
                to { transform: rotate(360deg); }
            }
            
            .logout-modal-body p {
                color: #374151;
                margin-bottom: 10px;
                line-height: 1.5;
            }
            
            #logoutTimer {
                color: #dc2626;
                font-size: 20px;
                font-weight: 700;
            }
            
            .logout-modal-actions {
                padding: 0 20px 20px;
                display: flex;
                gap: 10px;
            }
            
            .logout-modal-actions .btn {
                flex: 1;
                padding: 12px 16px;
                border-radius: 8px;
                border: none;
                font-weight: 600;
                cursor: pointer;
                transition: all 0.2s ease;
                display: flex;
                align-items: center;
                justify-content: center;
                gap: 8px;
            }
            
            .btn-primary {
                background: #2563eb;
                color: white;
            }
            
            .btn-primary:hover {
                background: #1d4ed8;
                transform: translateY(-1px);
            }
            
            .btn-secondary {
                background: #6b7280;
                color: white;
            }
            
            .btn-secondary:hover {
                background: #374151;
            }
            
            .btn-icon {
                font-size: 16px;
            }
            </style>
        `;
        
        // Lisa dokumendile ainult kui pole veel lisatud
        if (!document.querySelector('#autoLogoutStyles')) {
            document.head.insertAdjacentHTML('beforeend', styles);
        }
        
        // Lisa modal ainult kui pole veel lisatud
        if (!document.querySelector('#autoLogoutModal')) {
            document.body.insertAdjacentHTML('beforeend', modalHTML);
        }
        
        // Lisa event listenerid
        const stayBtn = document.getElementById('stayLoggedBtn');
        const logoutBtn = document.getElementById('logoutNowBtn');
        
        if (stayBtn) {
            stayBtn.addEventListener('click', () => {
                this.resetActivity();
                // 🆕 UUS: Tee kohe serveri kontroll ka
                this.checkServerSession();
            });
        }
        
        if (logoutBtn) {
            logoutBtn.addEventListener('click', () => {
                this.performLogout('Kasutaja valis kohe väljalogimine');
            });
        }
    }
    
    showWarning(secondsLeft) {
        this.warningShown = true;
        const modal = document.getElementById('autoLogoutModal');
        
        if (modal) {
            modal.style.display = 'flex';
            this.updateWarningTimer(secondsLeft);
            
            // Lisa klaviatuuri event listener
            this.escapeListener = (e) => {
                if (e.key === 'Escape') {
                    this.resetActivity();
                    // 🆕 UUS: Kontrolli serveri sessioon ka
                    this.checkServerSession();
                }
            };
            document.addEventListener('keydown', this.escapeListener);
        }
        
        console.warn(`⚠️ Auto-logout hoiatus: ${secondsLeft}s jäänud`);
    }
    
    hideWarning() {
        this.warningShown = false;
        const modal = document.getElementById('autoLogoutModal');
        
        if (modal) {
            modal.style.display = 'none';
        }
        
        // Eemalda klaviatuuri listener
        if (this.escapeListener) {
            document.removeEventListener('keydown', this.escapeListener);
        }
        
        console.log('✅ Auto-logout hoiatus peidetud');
    }
    
    updateWarningTimer(secondsLeft) {
        const timer = document.getElementById('logoutTimer');
        if (timer) {
            timer.textContent = Math.max(0, secondsLeft);
        }
    }
    
    // 🆕 UUS: Serveri poolne väljalogimine
    performServerLogout(reason) {
        console.log('🔒 Serveri poolne väljalogimine:', reason);
        
        // Peata kõik timerid
        this.stopAllTimers();
        
        // Näita serveri logout sõnumit
        this.showServerLogoutMessage(reason);
        
        // Kohe logout lehele
        setTimeout(() => {
            window.location.href = this.getLogoutUrl() + '?reason=server&auto=1';
        }, 2000);
    }
    
    performLogout(reason) {
        console.log('🔒 Kliendi poolne väljalogimine:', reason);
        
        // Peata timerid
        this.stopAllTimers();
        
        // Näita loading
        this.showLogoutMessage();
        
        // Teosta väljalogimine
        setTimeout(() => {
            // Kustuta sessioon andmed
            if (typeof localStorage !== 'undefined') {
                localStorage.clear();
            }
            if (typeof sessionStorage !== 'undefined') {
                sessionStorage.clear();
            }
            
            // Suuna logout lehele - PARANDATUD URL
            window.location.href = this.getLogoutUrl() + '?reason=timeout&auto=1';
        }, 1000);
    }
    
    stopAllTimers() {
        if (this.checkTimer) {
            clearInterval(this.checkTimer);
        }
        if (this.serverCheckTimer) {
            clearInterval(this.serverCheckTimer);
        }
    }
    
    showServerLogoutMessage(reason) {
        const modal = document.getElementById('autoLogoutModal');
        if (modal) {
            modal.style.display = 'flex';
            const content = modal.querySelector('.logout-modal-content');
            content.innerHTML = `
                <div class="logout-modal-header">
                    <h3>🔒 Sessioon lõppenud</h3>
                </div>
                <div class="logout-modal-body">
                    <div class="logout-icon">
                        <span style="font-size: 24px;">⚠️</span>
                    </div>
                    <p><strong>Põhjus:</strong> ${reason}</p>
                    <p>Suuname sind sisselogimise lehele...</p>
                </div>
            `;
        }
    }
    
    showLogoutMessage() {
        const modal = document.getElementById('autoLogoutModal');
        if (modal) {
            modal.style.display = 'flex';
            const content = modal.querySelector('.logout-modal-content');
            content.innerHTML = `
                <div class="logout-modal-header">
                    <h3>🔒 Väljalogimine</h3>
                </div>
                <div class="logout-modal-body">
                    <div class="logout-icon">
                        <span class="logout-loading-spinner">⟳</span>
                    </div>
                    <p><strong>Logitakse välja automaatselt...</strong></p>
                    <p>Ootame natuke ja suuname login lehele.</p>
                    <div style="margin-top: 20px;">
                        <div style="background: #f3f4f6; padding: 10px; border-radius: 8px; font-size: 14px; color: #6b7280;">
                            💡 Turvalisuse kaalutlusel logiti sind automaatselt välja
                        </div>
                    </div>
                </div>
            `;
        }
    }
    
    getLogoutUrl() {
        // PARANDATUD: Ära otsi header linke, kasuta alati õiget logout.php URL-i
        
        // Tuvasta õige base path
        const currentPath = window.location.pathname;
        let basePath = '';
        
        if (currentPath.includes('/ratsaklubi.estreka')) {
            basePath = '/ratsaklubi.estreka';
        } else {
            // Tuvasta base path automaatselt
            const pathParts = currentPath.split('/');
            if (pathParts.length > 2) {
                basePath = '/' + pathParts[1];
            }
        }
        
        const logoutUrl = window.location.origin + basePath + '/logout.php';
        console.log('🔗 Generated logout URL:', logoutUrl);
        return logoutUrl;
    }
    
    // Avalik API
    extend(minutes) {
        this.resetActivity();
        // Tee ka serveri kontroll
        this.checkServerSession();
        console.log(`⏰ Sessioon pikendatud ${minutes} minuti võrra`);
    }
    
    destroy() {
        this.stopAllTimers();
        
        // Eemalda modal
        const modal = document.getElementById('autoLogoutModal');
        if (modal) {
            modal.remove();
        }
        
        // Eemalda stiilid
        const styles = document.getElementById('autoLogoutStyles');
        if (styles) {
            styles.remove();
        }
        
        console.log('🔒 Auto-logout süsteem peatatud');
    }
    
    getStatus() {
        const now = Date.now();
        const timeSinceActivity = now - this.lastActivity;
        const timeUntilLogout = this.timeoutMs - timeSinceActivity;
        
        return {
            active: true,
            lastActivity: new Date(this.lastActivity),
            timeUntilLogout: Math.max(0, Math.ceil(timeUntilLogout / 1000)),
            warningShown: this.warningShown,
            timeoutMinutes: this.timeoutMinutes,
            serverCheckInterval: this.serverCheckInterval,
            apiUrl: this.apiUrl,
            serverCheckErrors: this.serverCheckErrors || 0
        };
    }
}

// Globaalne initsialiseerija
window.initAutoLogout = function(options = {}) {
    // Ainult sisselogitud kasutajatele
    if (!document.body.classList.contains('logged-in') && 
        typeof window.isLoggedIn === 'undefined') {
        return null;
    }
    
    // Eemalda vana instants
    if (window.autoLogout) {
        window.autoLogout.destroy();
    }
    
    // Loo uus instants
    window.autoLogout = new AutoLogout(options);
    
    // Lisa debug käsud (development režiimis)
    if (window.location.hostname === 'localhost' || window.location.search.includes('debug')) {
        window.autoLogoutDebug = {
            status: () => window.autoLogout.getStatus(),
            extend: (min) => window.autoLogout.extend(min),
            trigger: () => window.autoLogout.performLogout('Debug test'),
            reset: () => window.autoLogout.resetActivity(),
            checkServer: () => window.autoLogout.checkServerSession()
        };
        
        console.log('🔧 Auto-logout debug käsud: window.autoLogoutDebug');
        console.log('   - status(): näita hetke olekut');
        console.log('   - extend(min): pikenda sessiooni');
        console.log('   - trigger(): käivita väljalogimine');
        console.log('   - reset(): reset aktiivsus');
        console.log('   - checkServer(): kontrolli serveri sessiooni');
    }
    
    return window.autoLogout;
};

// Auto-init kui leht on laetud ja kasutaja sisse logitud
document.addEventListener('DOMContentLoaded', function() {
    // Kontrolli kas kasutaja on sisse logitud
    const userMenu = document.querySelector('.user-menu');
    const loginLink = document.querySelector('a[href*="login"]');
    
    if (userMenu && !loginLink) {
        // Kasutaja on sisse logitud
        setTimeout(() => {
            window.initAutoLogout({
                timeoutMinutes: 30,         // 30 minutit
                warningMinutes: 5,          // 5 minutit enne hoiatus
                serverCheckInterval: 300000 // 5 minutit serveri kontroll
            });
        }, 1000);
    }
});

console.log('✅ Auto-logout.js laetud - TÄIUSTATUD versioon (serverikontrolliga)');