// Sistema de autenticación
const Auth = {
    token: null,
    user: null,
    
    init() {
        this.token = localStorage.getItem('auth_token');
        const userData = localStorage.getItem('user_data');
        
        if (userData) {
            try {
                this.user = JSON.parse(userData);
            } catch (e) {
                this.user = null;
            }
        }
        
        // Verificar autenticación
        if (!this.token || !this.user) {
            this.redirectToLogin();
            return false;
        }
        
        // Verificar token con el servidor
        this.verifyToken();
        return true;
    },
    
    async verifyToken() {
        try {
            const response = await fetch('api/auth.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    action: 'verify',
                    token: this.token
                })
            });
            
            const data = await response.json();
            
            if (!data.success) {
                this.logout();
            } else {
                // Actualizar datos del usuario
                this.user = data.user;
                localStorage.setItem('user_data', JSON.stringify(data.user));
                this.updateUI();
            }
        } catch (error) {
            console.error('Error verificando token:', error);
        }
    },
    
    updateUI() {
        // Actualizar nombre de usuario en el header
        const userMenu = document.querySelector('.user-menu span');
        if (userMenu && this.user) {
            userMenu.textContent = this.user.full_name || this.user.username;
        }
        
        // Ocultar elementos según permisos
        this.applyPermissions();
    },
    
    applyPermissions() {
        if (!this.user || !this.user.permissions) return;
        
        const permissions = this.user.permissions;
        
        // Ocultar páginas sin permiso
        const navItems = document.querySelectorAll('.nav-item');
        navItems.forEach(item => {
            const page = item.dataset.page;
            const requiredPermission = this.getRequiredPermission(page);
            
            if (requiredPermission && !permissions.includes(requiredPermission)) {
                item.style.display = 'none';
            }
        });
        
        // Ocultar botones de acción sin permiso
        this.hideUnauthorizedButtons();
    },
    
    getRequiredPermission(page) {
        const permissionMap = {
            'dashboard': 'view_dashboard',
            'users': 'view_admin_users',
            'landing': 'view_landing',
            'roles': 'view_roles',
            'announcements': 'view_announcements',
            'downloads': 'manage_downloads',
            'feedback': 'view_feedback'
        };
        
        return permissionMap[page];
    },
    
    checkPageAccess(page) {
        const requiredPermission = this.getRequiredPermission(page);
        if (requiredPermission && !this.hasPermission(requiredPermission)) {
            if (window.navigateTo) {
                window.navigateTo('dashboard');
            }
            return false;
        }
        return true;
    },
    
    hideUnauthorizedButtons() {
        const permissions = this.user.permissions;
        
        // Botón de nuevo usuario
        if (!permissions.includes('create_admin_users')) {
            const newUserBtn = document.getElementById('newUserBtn');
            if (newUserBtn) newUserBtn.style.display = 'none';
        }
        
        // Botón de nuevo rol
        if (!permissions.includes('manage_roles')) {
            const newRoleBtn = document.getElementById('newRoleBtn');
            if (newRoleBtn) newRoleBtn.style.display = 'none';
        }
    },
    
    hasPermission(permission) {
        // Super Admin (role_id = 1) tiene todos los permisos
        if (this.user && this.user.role_id === 1) {
            return true;
        }
        return this.user && this.user.permissions && this.user.permissions.includes(permission);
    },
    
    async logout() {
        try {
            await fetch('api/auth.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    action: 'logout',
                    token: this.token
                })
            });
        } catch (error) {
            console.error('Error al cerrar sesión:', error);
        }
        
        localStorage.removeItem('auth_token');
        localStorage.removeItem('user_data');
        this.redirectToLogin();
    },
    
    redirectToLogin() {
        window.location.href = 'landing.html';
    }
};

// Inicializar autenticación al cargar la página
document.addEventListener('DOMContentLoaded', () => {
    if (!Auth.init()) {
        return; // No continuar si no está autenticado
    }
    
    // Agregar botón de logout
    const userMenu = document.querySelector('.user-menu');
    if (userMenu) {
        const logoutBtn = document.createElement('button');
        logoutBtn.innerHTML = '<i class="fas fa-sign-out-alt"></i>';
        logoutBtn.className = 'btn-logout';
        logoutBtn.onclick = () => Auth.logout();
        userMenu.appendChild(logoutBtn);
    }
});

// Agregar estilos para el botón de logout
const style = document.createElement('style');
style.textContent = `
    .btn-logout {
        background: none;
        border: none;
        color: var(--text);
        font-size: 1.2rem;
        cursor: pointer;
        margin-left: 15px;
        padding: 8px;
        border-radius: 8px;
        transition: all 0.3s;
    }
    
    .btn-logout:hover {
        background: var(--light);
        color: var(--danger);
    }
`;
document.head.appendChild(style);
