class AutoLogoutManager {
    constructor() {
        this.timer = null;
        this.warningTimer = null;
        this.timeout = 60; // Standard: 60 Minuten
        this.warningTime = 5; // Warnung 5 Minuten vor Logout
        this.isWarningShown = false;
        
        this.init();
    }

    async init() {
        await this.loadSettings();
        this.setupActivityListeners();
        this.startTimer();
    }

    async loadSettings() {
        try {
            const response = await fetch('/api/user/settings');
            if (response.ok) {
                const data = await response.json();
                if (data.success && data.settings.privacy?.auto_logout) {
                    const timeout = parseInt(data.settings.privacy.auto_logout);
                    if (timeout > 0 && timeout !== 'never') {
                        this.timeout = timeout;
                    } else {
                        this.timeout = 0; // Deaktiviert
                    }
                }
            }
        } catch (error) {
            console.warn('Auto-Logout-Einstellungen konnten nicht geladen werden:', error);
        }
    }

    setupActivityListeners() {
        const events = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart', 'click'];
        
        events.forEach(event => {
            document.addEventListener(event, () => this.resetTimer(), { passive: true });
        });
    }

    startTimer() {
        if (this.timeout <= 0) return;

        this.clearTimers();
        
        const timeoutMs = this.timeout * 60 * 1000;
        const warningMs = this.warningTime * 60 * 1000;

        this.warningTimer = setTimeout(() => this.showWarning(), timeoutMs - warningMs);
        this.timer = setTimeout(() => this.performLogout(), timeoutMs);
    }

    resetTimer() {
        if (this.isWarningShown) {
            this.closeWarning();
        }
        this.startTimer();
    }

    clearTimers() {
        if (this.timer) clearTimeout(this.timer);
        if (this.warningTimer) clearTimeout(this.warningTimer);
    }

    showWarning() {
        if (this.isWarningShown) return;
        this.isWarningShown = true;

        const modal = document.createElement('div');
        modal.id = 'auto-logout-warning';
        modal.className = 'fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50';
        modal.innerHTML = `
            <div class="bg-white dark:bg-slate-800 rounded-lg p-6 max-w-md mx-4 shadow-xl">
                <h3 class="text-lg font-medium text-slate-900 dark:text-white mb-4">Automatische Abmeldung</h3>
                <p class="text-sm text-slate-600 dark:text-slate-300 mb-4">
                    Sie werden in ${this.warningTime} Minuten aufgrund von Inaktivität abgemeldet.
                </p>
                <div class="flex space-x-3">
                    <button id="stay-logged-in" class="bg-blue-600 text-white px-4 py-2 rounded-lg">
                        Angemeldet bleiben
                    </button>
                    <button id="logout-now" class="bg-gray-300 text-slate-700 px-4 py-2 rounded-lg">
                        Jetzt abmelden
                    </button>
                </div>
            </div>
        `;

        document.body.appendChild(modal);

        document.getElementById('stay-logged-in').onclick = () => {
            this.closeWarning();
            this.sendKeepAlive();
            this.resetTimer();
        };

        document.getElementById('logout-now').onclick = () => {
            this.performLogout();
        };
    }

    closeWarning() {
        const modal = document.getElementById('auto-logout-warning');
        if (modal) modal.remove();
        this.isWarningShown = false;
    }

    async sendKeepAlive() {
        try {
            await fetch('/api/auth/keep-alive', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'X-CSRFToken': this.getCSRFToken()
                }
            });
        } catch (error) {
            console.warn('Keep-Alive fehlgeschlagen:', error);
        }
    }

    getCSRFToken() {
        const metaTag = document.querySelector('meta[name="csrf-token"]');
        return metaTag ? metaTag.getAttribute('content') : '';
    }

    async performLogout() {
        this.closeWarning();
        this.clearTimers();
        window.location.href = '/auth/logout';
    }
}

// Initialisierung
document.addEventListener('DOMContentLoaded', function() {
    if (!window.location.pathname.includes('/login')) {
        window.autoLogoutManager = new AutoLogoutManager();
    }
});