let USER = {};
let swRegistration = null;

// Определение ID главного блока
let app = document.getElementById('app');

// Конфигурация роутера
Router.config({ mode: 'history' });

async function appReload() {

    location.reload();

    // Router.navigate(window.location.pathname, false).check();

    // // Закрытие старого соединения WebSocket
    // if (socket) socket.close(1000, "Перезапуск соединения");
    // listEntrances = []
    // listApartment = []
}

// Функция загрузки приложения
window.addEventListener('load', async function () {
    console.log('[OS] ', detectOS());
    if (window.matchMedia('(display-mode: standalone)').matches) {
        if (detectOS() == 'Android') {
            document.getElementById('navigation').dataset.state = '';
        } else if (detectOS() == 'iOS') {
            document.getElementById('navigation').dataset.state = 'ios';
            localStorage.setItem('backToTop', 'false');
        } else if (detectOS() == 'MacOS') {
            document.getElementById('navigation').dataset.state = 'ios';
            localStorage.setItem('backToTop', 'false');
        } else {
            document.getElementById('navigation').dataset.state = '';
        }
    }

    if (Router.getParams().uuid) {
        localStorage.setItem("uuid", Router.getParams().uuid)
    }

    let uuid = localStorage.getItem("uuid");
    if (!uuid) {
        Router.navigate(`/auth`).check().listen().delegateLinks();
    } else {
        const URL = `${CONFIG.api}auth`;
        USER = await fetch(URL, {
            method: 'GET',
            headers: {
                "Content-Type": "application/json, text/plain, */*",
                "Authorization": uuid
            }
        }).then(response => {
            if (response.status === 401) {
                localStorage.removeItem("uuid");
                Router.navigate(`/auth`);
            }
            return response.json();
        });

        console.log("USER Info: ", USER);


        if (USER.possibilities.can_view_sheeps) document.getElementById("li-sheeps").style.display = "";
        if (USER.possibilities.can_view_schedule) document.getElementById("li-schedule").style.display = "";
        if (USER.possibilities.can_manager_territory) document.getElementById("li-territory").style.display = "";
        if (USER.possibilities.can_view_stand) document.getElementById("li-stand").style.display = "";
        document.getElementById("li-options").style.display = "";

        if (USER.possibilities.can_view_sheeps) await Sheeps.sheeps_list.loadAPI();

        editFontStyle();

        Router.check().listen().delegateLinks();

        if (Cloud.socket) Cloud.socket.close(1000, "Перезапуск з'єднання");
        Cloud.start();
    }
});

function editFontStyle() {
    let fontSize = localStorage.getItem("fontSize")
        ? localStorage.getItem("fontSize")
        : 'medium';

    applyFontMode(fontSize);
}

function applyFontMode(mode) {
    const options = {
        "small": {
            "--FontSize1": "10px",
            "--FontSize2": "11px",
            "--FontSize3": "12px",
            "--FontSize4": "13px",
            "--FontSize5": "14px"
        },
        "medium": {
            "--FontSize1": "12px",
            "--FontSize2": "13px",
            "--FontSize3": "14px",
            "--FontSize4": "15px",
            "--FontSize5": "16px"
        },
        "large": {
            "--FontSize1": "15px",
            "--FontSize2": "16px",
            "--FontSize3": "17px",
            "--FontSize4": "18px",
            "--FontSize5": "19px"
        }
    };

    const root = document.documentElement;
    const config = options[mode];

    if (!config) return;

    Object.keys(config).forEach(key => {
        if (key.startsWith("--")) {
            root.style.setProperty(key, config[key]);
        }
    });
}


// Банер з прохання встановлення PWA
let deferredPrompt;
const isInStandaloneMode = () =>
    ('standalone' in window.navigator && window.navigator.standalone === true);

if (detectOS() == 'iOS' && !isInStandaloneMode()) {
    setTimeout(() => {
        document.getElementById('blur-backdrop').classList.remove('pwa-hidden');
        document.getElementById('pwa-ios-overlay').classList.remove('pwa-hidden');
        document.body.classList.add('modal-open');
    }, 1000);
}

window.addEventListener("beforeinstallprompt", (e) => {
    if (localStorage.getItem('modal') != "false") {
        e.preventDefault();
        deferredPrompt = e;

        document.getElementById("blur-backdrop").classList.remove("pwa-hidden");
        document.getElementById("pwa-install-overlay").classList.remove("pwa-hidden");
        document.body.classList.add("modal-open");
    }
});
document.getElementById("pwa-install-button").addEventListener("click", async () => {
    if (!deferredPrompt) return;

    deferredPrompt.prompt();
    const { outcome } = await deferredPrompt.userChoice;
    console.log(`Результат встановлення PWA: ${outcome}`);

    closePopup();
});
document.getElementById("pwa-close-button").addEventListener("click", closePopup);
document.getElementById('pwa-ios-close-button').addEventListener('click', closePopup);

function closePopup() {
    document.getElementById("pwa-install-overlay").classList.add("pwa-hidden");
    document.getElementById("blur-backdrop").classList.add("pwa-hidden");
    document.getElementById('pwa-ios-overlay').classList.add('pwa-hidden');
    document.body.classList.remove("modal-open");
    deferredPrompt = null;
}



if ('serviceWorker' in navigator) {
    let refreshing = false;

    const showUpdateBanner = sw => {
        const banner = document.getElementById('update_banner');
        if (!banner) return;

        banner.dataset.state = 'updateavailable';
        banner.querySelector('.headline').textContent = 'Доступне оновлення';
        banner.querySelector('.subhead').textContent = 'Натисніть, щоб оновити додаток до останньої версії!';

        banner.addEventListener('click', () => {
            banner.querySelector('.headline').textContent = '';
            banner.querySelector('.subhead').textContent = '';
            banner.querySelector('#update_banner_icon').style.display = 'block';

            sw.postMessage('skipWaiting'); // активує новий SW
            sw.postMessage('updateCache'); // оновлює кеш
        });
    };

    navigator.serviceWorker.register('/sw.js').then(reg => {
        // якщо є waiting SW, показуємо банер
        if (reg.waiting) showUpdateBanner(reg.waiting);

        // слідкуємо за новим воркером
        reg.addEventListener('updatefound', () => {
            const newWorker = reg.installing;
            if (!newWorker) return;

            newWorker.addEventListener('statechange', () => {
                if (newWorker.state === 'installed' && reg.waiting) {
                    showUpdateBanner(reg.waiting); // лише показ банера
                }
            });
        });

        navigator.serviceWorker.addEventListener('controllerchange', () => {
            if (refreshing) return;
            refreshing = true;
            window.location.reload(); // відбувається ТІЛЬКИ після skipWaiting
        });

    }).catch(err => console.error('Помилка реєстрації SW:', err));
}