<!DOCTYPE html>
<html lang="fil">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
    <title>El Filibusterismo - C&E Publishing</title>

    <!-- PWA & Mobile Icons / Manifest -->
    <link rel="manifest" href="manifest.json">
    <meta name="theme-color" content="#000000">
    <meta name="mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <meta name="apple-mobile-web-app-title" content="El Filibusterismo">

    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            -webkit-tap-highlight-color: transparent;
        }
        html, body {
            width: 100vw;
            width: 100dvw;
            height: 100vh;
            height: 100dvh;
            background-color: #000000;
            overflow: hidden;
            touch-action: none;
            display: flex;
            justify-content: center;
            align-items: center;
            position: relative;
            font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
        }
        #ruffle-player {
            width: 100vw;
            width: 100dvw;
            height: 100vh;
            height: 100dvh;
            max-width: 100dvw;
            max-height: 100dvh;
            display: flex;
            justify-content: center;
            align-items: center;
            overflow: hidden;
        }
        ruffle-player {
            width: 100% !important;
            height: 100% !important;
            max-width: 100dvw !important;
            max-height: 100dvh !important;
        }
        
        /* Floating Mobile Fullscreen Button */
        .fs-floating-btn {
            position: fixed;
            top: 8px;
            right: 8px;
            z-index: 99999;
            background: rgba(0, 0, 0, 0.65);
            color: #ffffff;
            border: 1px solid rgba(255, 255, 255, 0.3);
            border-radius: 20px;
            padding: 6px 12px;
            font-size: 0.75rem;
            font-weight: 600;
            backdrop-filter: blur(8px);
            -webkit-backdrop-filter: blur(8px);
            cursor: pointer;
            display: flex;
            align-items: center;
            gap: 4px;
            box-shadow: 0 4px 12px rgba(0,0,0,0.6);
            transition: all 0.2s ease;
            opacity: 0.9;
        }
        .fs-floating-btn:hover {
            opacity: 1;
            background: rgba(0, 0, 0, 0.9);
            transform: scale(1.05);
        }

        /* Password Gate Overlay */
        #password-gate {
            position: fixed;
            top: 0;
            left: 0;
            width: 100vw;
            width: 100dvw;
            height: 100vh;
            height: 100dvh;
            background: #000000;
            z-index: 9999999;
            display: flex;
            justify-content: center;
            align-items: center;
            color: #ffffff;
        }
        .gate-card {
            background: rgba(22, 27, 34, 0.95);
            border: 1px solid rgba(243, 156, 18, 0.4);
            border-radius: 20px;
            padding: 32px 24px;
            width: 90%;
            max-width: 360px;
            text-align: center;
            box-shadow: 0 20px 50px rgba(0,0,0,0.8), 0 0 20px rgba(243, 156, 18, 0.15);
            backdrop-filter: blur(16px);
        }
        .gate-icon {
            font-size: 2.2rem;
            margin-bottom: 10px;
        }
        .gate-card h2 {
            font-size: 1.3rem;
            color: #f39c12;
            margin-bottom: 6px;
            letter-spacing: 0.5px;
        }
        .gate-card p {
            font-size: 0.85rem;
            color: #8b949e;
            margin-bottom: 18px;
        }
        .input-group {
            display: flex;
            gap: 8px;
        }
        .input-group input {
            flex: 1;
            background: rgba(0, 0, 0, 0.6);
            border: 1px solid rgba(255, 255, 255, 0.2);
            padding: 12px 14px;
            border-radius: 10px;
            color: #fff;
            font-size: 1.1rem;
            text-align: center;
            letter-spacing: 3px;
            outline: none;
            transition: border 0.2s;
        }
        .input-group input:focus {
            border-color: #f39c12;
            box-shadow: 0 0 10px rgba(243, 156, 18, 0.4);
        }
        .input-group button {
            background: #e67e22;
            color: #fff;
            border: none;
            padding: 12px 16px;
            border-radius: 10px;
            font-weight: 600;
            cursor: pointer;
            transition: background 0.2s;
        }
        .input-group button:hover {
            background: #d35400;
        }
        #gate-error {
            color: #e74c3c;
            font-size: 0.82rem;
            margin-top: 12px;
            display: none;
            font-weight: 500;
        }
    </style>
</head>
<body>
    <!-- Password Gate Screen -->
    <div id="password-gate">
        <div class="gate-card">
            <div class="gate-icon">🔐</div>
            <h2>El Filibusterismo</h2>
            <p>Ilagay ang password upang pumasok</p>
            <div class="input-group">
                <input type="password" id="pass-input" placeholder="Password" maxlength="10" autocomplete="off" onkeydown="if(event.key==='Enter') verifyPassword()">
                <button onclick="verifyPassword()">Pumasok</button>
            </div>
            <div id="gate-error">Maling password! Subukang muli.</div>
        </div>
    </div>

    <!-- Floating Mobile Fullscreen Toggle -->
    <button class="fs-floating-btn" onclick="toggleMobileFullscreen()">
        <span>⛶ Fullscreen</span>
    </button>

    <div id="ruffle-player"></div>

    <script src="https://unpkg.com/@ruffle-rs/ruffle"></script>
    <script>
        const CORRECT_PIN = "69420";
        let isPlayerLoaded = false;

        function sendAnalyticsEvent(type, message = "") {
            const body = JSON.stringify({
                type,
                message: String(message).slice(0, 240),
                path: location.pathname
            });
            if (navigator.sendBeacon) {
                navigator.sendBeacon("/api/event", new Blob([body], { type: "application/json" }));
            } else {
                fetch("/api/event", {
                    method: "POST",
                    headers: { "Content-Type": "application/json" },
                    body,
                    keepalive: true
                }).catch(() => {});
            }
        }
        window.addEventListener("error", event => sendAnalyticsEvent("error", event.message));
        window.addEventListener("unhandledrejection", event => sendAnalyticsEvent("error", String(event.reason || "Unhandled error")));

        // Register PWA Service Worker for Offline Functionality
        if ('serviceWorker' in navigator) {
            window.addEventListener('load', () => {
                navigator.serviceWorker.register('./sw.js')
                    .then(reg => console.log('[PWA] Service Worker active:', reg.scope))
                    .catch(err => console.warn('[PWA] Service Worker registration skipped:', err));
            });
        }

        // Check authentication state on page load
        window.addEventListener("DOMContentLoaded", () => {
            if (sessionStorage.getItem("elfili_auth") === "true") {
                unlockGate();
            } else {
                document.getElementById("pass-input").focus();
            }
        });

        // Verify Entered PIN
        function verifyPassword() {
            const input = document.getElementById("pass-input").value.trim();
            const errorEl = document.getElementById("gate-error");
            if (input === CORRECT_PIN) {
                sessionStorage.setItem("elfili_auth", "true");
                unlockGate();
            } else {
                errorEl.style.display = "block";
                document.getElementById("pass-input").value = "";
                document.getElementById("pass-input").focus();
            }
        }

        // Unlock Screen & Load Ruffle Player
        function unlockGate() {
            const gate = document.getElementById("password-gate");
            if (gate) {
                gate.style.display = "none";
            }
            if (!isPlayerLoaded) {
                isPlayerLoaded = true;
                initRufflePlayer();
            }
        }

        // Initialize Ruffle Player with ForceScale & WebGL GPU Acceleration
        function initRufflePlayer() {
            const ruffle = window.RufflePlayer.newest();
            const player = ruffle.createPlayer();
            const container = document.getElementById("ruffle-player");
            container.appendChild(player);

            player.style.width = "100%";
            player.style.height = "100%";
            player.style.maxWidth = "100dvw";
            player.style.maxHeight = "100dvh";

            player.load({
                url: "ElFilibusterismo.swf",
                base: "./",
                flashVars: {
                    xmlFile: "xml/pages.xml",
                    tauxmlFile: "xml/tauhan2.xml",
                    bookxmlFile: "xml/nilalaman2.xml"
                },
                allowScriptAccess: true,
                backgroundColor: "#000000",
                letterbox: "on",
                scale: "showAll",
                forceScale: true,
                autoplay: "on",
                unmuteOverlay: "hidden",
                graphics: "webgl",
                powerPreference: "high-performance",
                quality: "medium",
                wmode: "opaque"
            });
            sendAnalyticsEvent("player_loaded");
        }

        // Mobile Fullscreen Handler
        function toggleMobileFullscreen() {
            if (!document.fullscreenElement && !document.webkitFullscreenElement) {
                const docEl = document.documentElement;
                if (docEl.requestFullscreen) {
                    docEl.requestFullscreen();
                } else if (docEl.webkitRequestFullscreen) {
                    docEl.webkitRequestFullscreen();
                }
            } else {
                if (document.exitFullscreen) {
                    document.exitFullscreen();
                } else if (document.webkitExitFullscreen) {
                    document.webkitExitFullscreen();
                }
            }
        }
    </script>
<!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "9839f727ca3145ada08de8072202fc06"}'></script><!-- Cloudflare Pages Analytics --></body>
</html>
