/**
 * auth.js — Centralized Auth Guard for Canifa Admin
 * ===================================================
 * 
 * BẬT/TẮT AUTH LINH HOẠT:
 * 
 *   Cách 1: Sửa biến dưới đây
 *     const AUTH_ENABLED = false;  // tắt auth
 * 
 *   Cách 2: URL param
 *     /static/main.html?noauth=1  // bypass auth cho lần này
 * 
 *   Cách 3: localStorage
 *     localStorage.setItem('canifa_auth_disabled', 'true');  // tắt auth mọi lúc
 *     localStorage.removeItem('canifa_auth_disabled');        // bật lại
 * 
 *   Cách 4: Console nhanh
 *     window.CANIFA_AUTH.disable();  // tắt + reload
 *     window.CANIFA_AUTH.enable();   // bật + reload
 *     window.CANIFA_AUTH.status();   // xem trạng thái
 * 
 * USAGE: Thêm vào <head> của mọi page cần auth:
 *   <script src="/static/auth.js"></script>
 */

(function () {
    'use strict';

    const AUTH_ENABLED = false;

    // ═══════════════════════════════════════════════════
    // HELPER: Check if auth should be enforced
    // ═══════════════════════════════════════════════════
    function isAuthRequired() {
        // Master switch
        if (!AUTH_ENABLED) return false;

        // URL param bypass: ?noauth=1
        const params = new URLSearchParams(window.location.search);
        if (params.get('noauth') === '1') return false;

        // localStorage bypass
        if (localStorage.getItem('canifa_auth_disabled') === 'true') return false;

        return true;
    }

    // ═══════════════════════════════════════════════════
    // CORE: Get current auth state
    // ═══════════════════════════════════════════════════
    function getToken() {
        return localStorage.getItem('canifa_token') || null;
    }

    function getUser() {
        try {
            return JSON.parse(localStorage.getItem('canifa_user') || 'null');
        } catch {
            return null;
        }
    }

    function isLoggedIn() {
        return !!getToken() && !!getUser();
    }

    // ═══════════════════════════════════════════════════
    // AUTH GUARD — Redirect to login if needed
    // ═══════════════════════════════════════════════════
    function guard() {
        if (!getUser()) {
            localStorage.setItem('canifa_user', JSON.stringify({
                username: 'dev',
                role: 'user',
                id: 'dev-mode',
            }));
        }
        if (!getToken()) {
            localStorage.setItem('canifa_token', 'dev-bypass-token');
        }
        return true;
    }

    // ═══════════════════════════════════════════════════
    // ADMIN REDIRECT — For pages that need admin role
    // ═══════════════════════════════════════════════════
    function guardAdmin() {
        guard();

        const user = getUser();
        if (!user || user.role !== 'admin') {
            localStorage.setItem('canifa_user', JSON.stringify({
                username: 'admin',
                role: 'admin',
                id: 'dev-admin',
            }));
        }
        return true;
    }

    // ═══════════════════════════════════════════════════
    // LOGOUT
    // ═══════════════════════════════════════════════════
    function logout() {
        localStorage.removeItem('canifa_token');
        localStorage.removeItem('canifa_user');
        window.location.replace('/static/main.html');
    }

    // ═══════════════════════════════════════════════════
    // AUTH HEADER — For fetch() calls
    // ═══════════════════════════════════════════════════
    function authHeaders(extra = {}) {
        const token = getToken();
        const headers = { 'Content-Type': 'application/json', ...extra };
        if (token) headers['Authorization'] = 'Bearer ' + token;
        return headers;
    }

    // ═══════════════════════════════════════════════════
    // UI HELPERS — Update sidebar user info
    // ═══════════════════════════════════════════════════
    function updateSidebarUser() {
        try {
            const user = getUser();
            if (!user) return;

            const nameEl = document.getElementById('userName');
            const avatarEl = document.getElementById('userAvatar');

            if (nameEl && user.username) nameEl.textContent = user.username;
            if (avatarEl && user.username) avatarEl.textContent = user.username.charAt(0).toUpperCase();
        } catch (e) {
            console.warn('updateSidebarUser:', e);
        }
    }

    // ═══════════════════════════════════════════════════
    // CONSOLE API — For quick toggling in DevTools
    // ═══════════════════════════════════════════════════
    window.CANIFA_AUTH = {
        enable() {
            localStorage.removeItem('canifa_auth_disabled');
            console.log('🔒 Auth ENABLED. Reloading...');
            location.reload();
        },
        disable() {
            localStorage.setItem('canifa_auth_disabled', 'true');
            console.log('🔓 Auth DISABLED. Reloading...');
            location.reload();
        },
        status() {
            const required = isAuthRequired();
            const loggedIn = isLoggedIn();
            const user = getUser();
            console.table({
                'AUTH_ENABLED (hardcode)': AUTH_ENABLED,
                'localStorage bypass': localStorage.getItem('canifa_auth_disabled') === 'true',
                'Effective': required ? '🔒 ON' : '🔓 OFF',
                'Logged in': loggedIn,
                'User': user?.username || 'none',
                'Role': user?.role || 'none',
                'Token': getToken() ? '✅ exists' : '❌ missing',
            });
        },
        // Getters
        token: getToken,
        user: getUser,
        isLoggedIn,
        isAuthRequired,
    };

    // ═══════════════════════════════════════════════════
    // EXPORTS (for pages that import this)
    // ═══════════════════════════════════════════════════
    window.canifaAuth = {
        guard,
        guardAdmin,
        logout,
        getToken,
        getUser,
        isLoggedIn,
        isAuthRequired,
        authHeaders,
        updateSidebarUser,
    };

    // Log status on load
    console.log(`[auth.js] Auth OFF | User: ${getUser()?.username || 'none'}`);

})();
