(function () {
    const pwaEnabled = window.MANIAR_PWA_ENABLED === true;

    if (!pwaEnabled) {
        return;
    }

    const baseUrl = window.MANIAR_PWA_BASE || '/';
    let deferredPrompt = null;

    if ('serviceWorker' in navigator) {
        window.addEventListener('load', function () {
            navigator.serviceWorker.register(baseUrl + 'sw.js', {
                scope: baseUrl
            }).catch(function () {});
        });
    }

    function createInstallBanner() {
        if (document.querySelector('.p21-install-banner')) {
            return document.querySelector('.p21-install-banner');
        }

        const banner = document.createElement('div');
        banner.className = 'p21-install-banner';

        banner.innerHTML = `
            <div class="p21-install-icon">
                <img src="${baseUrl}pwa-icon.php?size=192" alt="App">
            </div>

            <div class="p21-install-text">
                <strong>${window.MANIAR_PWA_INSTALL_TITLE || 'Install App'}</strong>
                <span>${window.MANIAR_PWA_INSTALL_TEXT || 'Add this store to your phone.'}</span>
            </div>

            <button type="button" class="p21-install-btn">Install</button>
            <button type="button" class="p21-install-close">×</button>
        `;

        document.body.appendChild(banner);

        banner.querySelector('.p21-install-close').addEventListener('click', function () {
            banner.classList.remove('show');
            localStorage.setItem('maniar_pwa_banner_closed', '1');
        });

        banner.querySelector('.p21-install-btn').addEventListener('click', async function () {
            if (!deferredPrompt) {
                return;
            }

            deferredPrompt.prompt();

            try {
                await deferredPrompt.userChoice;
            } catch (e) {}

            deferredPrompt = null;
            banner.classList.remove('show');
        });

        return banner;
    }

    window.addEventListener('beforeinstallprompt', function (event) {
        event.preventDefault();
        deferredPrompt = event;

        if (localStorage.getItem('maniar_pwa_banner_closed') === '1') {
            return;
        }

        setTimeout(function () {
            const banner = createInstallBanner();
            banner.classList.add('show');
        }, 1800);
    });

    window.addEventListener('appinstalled', function () {
        const banner = document.querySelector('.p21-install-banner');

        if (banner) {
            banner.classList.remove('show');
        }

        localStorage.setItem('maniar_pwa_installed', '1');
    });

    window.addEventListener('online', function () {
        document.body.classList.remove('p21-is-offline');
    });

    window.addEventListener('offline', function () {
        document.body.classList.add('p21-is-offline');
    });
})();