(function() {
    // Utworzenie (lub pobranie) meta viewport, jeśli jeszcze nie istnieje
    let metaViewport = document.querySelector('meta[name="viewport"]');
    if (!metaViewport) {
        metaViewport = document.createElement('meta');
        metaViewport.setAttribute('name', 'viewport');
        document.head.appendChild(metaViewport);
    }

    // Funkcja ustawiająca parametry viewport
    function setViewport(scale, userScalable = "no") {
        metaViewport.setAttribute('content', `width=device-width, initial-scale=${scale}, maximum-scale=${scale}, user-scalable=${userScalable}`);
    }

    // Ustawienie początkowego zoomu na 100%
    setViewport(1);

    // Monitorowanie zmian skali (o ile obsługiwany jest window.visualViewport)
    if (window.visualViewport) {
        window.visualViewport.addEventListener('resize', function() {
            if (window.visualViewport.scale !== 1) {
                setViewport(1);
            }
        });
    }
    // Dodatkowy fallback na window resize
    window.addEventListener('resize', function() {
        let scale = window.visualViewport ? window.visualViewport.scale : 1;
        if (scale !== 1) {
            setViewport(1);
        }
    });

    // Blokada powiększania przy dotyku, gdy dotykuje więcej niż jeden punkt
    document.addEventListener('touchstart', function(e) {
        if (e.touches.length > 1) {
            e.preventDefault();
        }
    }, { passive: false });

    // Blokada gestów pinch zoom
    document.addEventListener('touchmove', function(e) {
        if (e.scale && e.scale !== 1) {
            e.preventDefault();
        }
    }, { passive: false });

    // Blokada double-tap zoom
    let lastTouchEnd = 0;
    document.addEventListener('touchend', function(e) {
        const now = Date.now();
        if (now - lastTouchEnd <= 300) {
            e.preventDefault();
        }
        lastTouchEnd = now;
    }, false);

    // Blokada zdarzeń gestowych w iOS
    document.addEventListener('gesturestart', function(e) {
        e.preventDefault();
    });
    document.addEventListener('gesturechange', function(e) {
        e.preventDefault();
    });
    document.addEventListener('gestureend', function(e) {
        e.preventDefault();
    });

    // Blokada zaznaczania elementów poza inputami i textarea
    document.addEventListener('selectstart', function(e) {
        const tag = e.target.tagName.toLowerCase();
        if (tag !== 'input' && tag !== 'textarea') {
            e.preventDefault();
        }
    });

    // Dynamiczne wstrzykiwanie reguł CSS wyłączających zaznaczanie
    const style = document.createElement('style');
    style.innerHTML = `
      * {
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
      }
      input, textarea {
        -webkit-user-select: text;
        -moz-user-select: text;
        -ms-user-select: text;
        user-select: text;
      }
    `;
    document.head.appendChild(style);

    // Funkcje blokujące powiększanie, gdy focus jest na polu formularza
    function disableZoomOnFocus(e) {
        // Na focus ustawiamy viewport, aby nie umożliwiał skalowania
        setViewport(1, "no");
    }
    function enableZoomOnBlur(e) {
        // Po utracie focusu nadal wymuszamy 100% zoom
        setViewport(1, "no");
    }

    // Nasłuchiwanie focusin/focusout na inputach i textarea
    document.addEventListener('focusin', function(e) {
        const tag = e.target.tagName.toLowerCase();
        if (tag === 'input' || tag === 'textarea') {
            disableZoomOnFocus(e);
        }
    });
    document.addEventListener('focusout', function(e) {
        const tag = e.target.tagName.toLowerCase();
        if (tag === 'input' || tag === 'textarea') {
            enableZoomOnBlur(e);
        }
    });
})();
