<!--
Source Code Copyright © 2025 Ringheim Dissolve Media AB.
All rights reserved.
-->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>LED Rollup Preview</title>
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap');

        body {
            font-family: 'Roboto', sans-serif;
            display: flex;
            flex-direction: column;
            align-items: center;
            height: auto;
            min-height: 100vh;
            margin: 0;
            overflow-x: hidden; /* Prevent horizontal scrolling */
            background-color: #ffffff;
            color: #333333;
        }
        body.loading {
            visibility: hidden;
        }
        .logo {
            width: 150px;
            margin: 30px 0 25px 0; /* Padding above and below the logo */
        }
        p.description {
            font-size: 16px;
            color: #797C7F;
            text-align: center;
            margin-bottom: 20px;
            max-width: 600px;
            padding: 0 20px; /* Padding on left and right sides */
        }
        .container {
            position: relative;
            width: 105%;
            max-width: 1500px;
            aspect-ratio: 16 / 9;
            margin-top: 6px;
            margin-bottom: 25px;
        }
        .background {
            position: absolute;
            width: 100%;
            height: 100%;
            background-size: cover;
            background-position: center;
            z-index: 1;
            opacity: 0;
            transition: opacity 0.3s ease;
        }
        .background.loaded {
            opacity: 1;
        }
        .overlay {
            position: absolute;
            width: 100%;
            height: 100%;
            background-size: cover;
            background-position: center;
            pointer-events: none; /* Prevent overlay from interfering with interactions */
            z-index: 3;
        }
        .preview {
            position: absolute;
            overflow: hidden;
            z-index: 2;
        }

        .preview.screen-1 {
            width: 13.9%;
            height: 74.3%;
            top: 11.1%;
            left: 42%;
            transform: perspective(800px) rotateX(0deg) rotateY(0deg) scale(0.953);
        }

        .preview.screen-2 {
            width: 27.8%;
            height: 74.3%;
            top: 11.1%;
            left: 36.5%;
            transform: perspective(800px) rotateX(0deg) rotateY(0deg) scale(0.953);
        }

        .preview.screen-3 {
            width: 42.05%;
            height: 74.3%;
            top: 11.1%;
            left: 29%;
            transform: perspective(800px) rotateX(0deg) rotateY(0deg) scale(0.953);
        }

        .preview.screen-4 {
            width: 56%;
            height: 74.3%;
            top: 11.1%;
            left: 22%;
            transform: perspective(800px) rotateX(0deg) rotateY(0deg) scale(0.953);
        }

        .preview.screen-5 {
            width: 69.9%;
            height: 74.3%;
            top: 11.1%;
            left: 15.05%;
            transform: perspective(800px) rotateX(0deg) rotateY(0deg) scale(0.953);
        }

        .preview.screen-6 {
            width: 84.15%;
            height: 74.3%;
            top: 11.1%;
            left: 8.55%;
            transform: perspective(800px) rotateX(0deg) rotateY(0deg) scale(0.953);
        }

        canvas {
            position: absolute;
            width: 100%;
            height: 100%;
            object-fit: contain; /* Maintain proportions */
        }
        .upload-form {
            text-align: center;
            margin-bottom: 20px;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 30px; /* Increased spacing between elements */
        }
        .upload-form input[type="file"] {
            display: none; /* Hide the original file upload button */
        }
        .upload-form button, select {
            margin-top: 10px;
            padding: 10px 20px;
            font-size: 1rem;
            color: #ffffff;
            background-color: #838383;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        }
        .upload-form button:hover, select:hover {
            background-color: #4b4b4b;
        }
        .error {
            font-weight: bold;
            color: #d32f2f;
            font-size: 0.9rem;
            margin-top: 10px;
        }
        .change-background {
            margin-top: 0;
            margin-left: 0px;
            padding: 10px 20px;
            font-size: 1rem;
            color: #ffffff;
            background-color: #838383;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            display: inline-block;
        }
        .change-background:hover {
            background-color: #4b4b4b;
        }
        .footer-text {
            font-family: 'Roboto', sans-serif;
            font-size: 14px;
            color: #D2D3D5;
            text-align: center;
            margin-top: 0px;
        }
        select#screenSelector {
            height: 40px; /* Match height to button height */
            padding: 0 10px; /* Add some inner padding for the text */
            font-size: 1rem; /* Match font size */
            border: none; /* Remove default border */
            border-radius: 5px; /* Rounded corners, like the buttons */
            background-color: #838383; /* Same background color as the buttons */
            color: #ffffff; /* Same text color as the buttons */
            cursor: pointer;
        }
        select#screenSelector:hover {
            background-color: #4b4b4b; /* Matching hover effect */
        }
    </style>
</head>
<body class="loading">
    <img src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACiCAYAAAD7sPBpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMi1jMDAwIDc5LjU2NmViYzViNCwgMjAyMi8wNS8wOS0wODoyNTo1NSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIzLjQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDAyODA4Qjc1RjRBMTFFREEwQ0ZGMTMyMUI0MTBBRDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDAyODA4Qjg1RjRBMTFFREEwQ0ZGMTMyMUI0MTBBRDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4QUQxOEE1NjVGMzMxMUVEQTBDRkYxMzIxQjQxMEFEOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMDI4MDhCNjVGNEExMUVEQTBDRkYxMzIxQjQxMEFEOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhiRDbUAAD60SURBVHja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" alt="Logo" class="logo">
    <p class="description">Preview your video on an LED Rollup by clicking 'Select Video'. The video must be in MP4 format and have dimensions <span id="dimensions">256 x 768</span> pixels.</p>
    <div class="upload-form">
        <select id="screenSelector">
            <option value="1" selected>1 Screen</option>
            <option value="2">2 Screens</option>
            <option value="3">3 Screens</option>
            <option value="4">4 Screens</option>
            <option value="5">5 Screens</option>
            <option value="6">6 Screens</option>
        </select>
        <button type="button" id="customUploadButton">Select Video</button>
        <input type="file" id="videoUpload" accept="video/mp4">
        <button class="change-background" id="changeBackground">Change Background</button>
        <div id="errorMessage" class="error"></div>
    </div>
    </div>
    <div class="container">
        <div class="background" id="background" style="background-image: url('scene1.jpg'); opacity: 1;"></div>
        <div class="preview screen-1" id="preview">
            <canvas id="videoCanvas"></canvas>
        </div>
        <div class="overlay" id="overlay" style="background-image: url('stroke1.png');"></div>
    </div>
    <div class="footer-text">The LED Rollup Preview is a visual approximation and does not guarantee exact pixel-level accuracy of the final result.<br>LED Rollup Sverige AB © <span id="currentYear"></span> All Rights Reserved. Unauthorized use or distribution of this code is prohibited.</div>

    <script>
        const videoUpload = document.getElementById("videoUpload");
        const customUploadButton = document.getElementById("customUploadButton");
        const background = document.getElementById("background");
        const overlay = document.getElementById("overlay");
        const changeBackgroundButton = document.getElementById("changeBackground");
        const screenSelector = document.getElementById("screenSelector");
        const errorMessage = document.getElementById("errorMessage");
        const preview = document.getElementById("preview");
        const canvas = document.getElementById("videoCanvas");
        const ctx = canvas.getContext("2d");

        let video = null;
        let isBoothImage = false; // Track current background state

        const screenConfigs = {
            1: { width: 256, height: 768, scene: "scene1.jpg", booth: "booth1.jpg", stroke: "stroke1.png" },
            2: { width: 512, height: 768, scene: "scene2.jpg", booth: "booth2.jpg", stroke: "stroke2.png" },
            3: { width: 768, height: 768, scene: "scene3.jpg", booth: "booth3.jpg", stroke: "stroke3.png" },
            4: { width: 1024, height: 768, scene: "scene4.jpg", booth: "booth4.jpg", stroke: "stroke4.png" },
            5: { width: 1280, height: 768, scene: "scene5.jpg", booth: "booth5.jpg", stroke: "stroke5.png" },
            6: { width: 1536, height: 768, scene: "scene6.jpg", booth: "booth6.jpg", stroke: "stroke6.png" }
        };

        let currentScreen = 1;

        document.getElementById('currentYear').textContent = new Date().getFullYear();

        function preloadMedia(resources, callback) {
            let loadedCount = 0;

            resources.forEach(src => {
                const img = new Image();
                img.src = src;
                img.onload = () => {
                    loadedCount++;
                    if (loadedCount === resources.length) {
                        callback();
                    }
                };
                img.onerror = () => {
                    console.warn(`Error loading: ${src}`);
                    loadedCount++;
                    if (loadedCount === resources.length) {
                        callback();
                    }
                };
            });
        }

        window.addEventListener("DOMContentLoaded", () => {
            const resources = Object.values(screenConfigs).flatMap(config => [
                config.scene,
                config.stroke,
                config.booth
            ]);

            preloadMedia(resources, () => {
                // Once all media are preloaded, show the page
                document.body.classList.remove("loading");
            });
        });

screenSelector.addEventListener("change", (e) => {
    currentScreen = parseInt(e.target.value);
    const config = screenConfigs[currentScreen];

    background.classList.remove("loaded");
    const newBackground = isBoothImage ? config.booth : config.scene;
    const imgScene = new Image();
    imgScene.src = newBackground;
    imgScene.onload = () => {
        background.style.backgroundImage = `url('${imgScene.src}')`;
        background.classList.add("loaded");
    };

    overlay.style.backgroundImage = `url('${config.stroke}')`;
    changeBackgroundButton.dataset.boothImage = config.booth;
    document.getElementById("dimensions").textContent = `${config.width} x ${config.height}`;

    preview.className = `preview screen-${currentScreen}`;

    if (video) {
        video.pause();
        video.src = "";
        video.remove();
        video = null;
    }

    errorMessage.textContent = "";
    videoUpload.value = "";
    ctx.clearRect(0, 0, canvas.width, canvas.height);
});

        customUploadButton.addEventListener("click", () => {
            videoUpload.click();
        });

changeBackgroundButton.addEventListener("click", () => {
    const config = screenConfigs[currentScreen];
    const newBackground = isBoothImage ? config.scene : config.booth;
    isBoothImage = !isBoothImage; // Toggle the state immediately
    const img = new Image();
    img.src = newBackground;
    img.onload = () => {
        background.style.backgroundImage = `url('${img.src}')`;
    };
});

videoUpload.addEventListener("change", (event) => {
    const file = event.target.files[0];
    if (file) {
        const config = screenConfigs[currentScreen];
        const videoElement = document.createElement("video");

        videoElement.src = URL.createObjectURL(file);
        videoElement.loop = true; // Loop the video
        videoElement.addEventListener("loadedmetadata", () => {
            if (
                videoElement.videoWidth === config.width &&
                videoElement.videoHeight === config.height
            ) {
                errorMessage.textContent = "";
                video = videoElement;
                syncCanvasWithPreview();
                renderVideoWithLowResolution(video, canvas, ctx, config.width, config.height);
            } else {
                errorMessage.textContent = `Error: The video must have dimensions ${config.width} x ${config.height} pixels.`;
            }
        });
    }
});
        function syncCanvasWithPreview() {
            canvas.width = preview.clientWidth;
            canvas.height = preview.clientHeight;
        }

        function renderVideoWithLowResolution(videoElement, canvas, ctx, width, height) {
            function drawFrame() {
                ctx.clearRect(0, 0, canvas.width, canvas.height);
                ctx.drawImage(videoElement, 0, 0, width, height, 0, 0, canvas.width, canvas.height);
                requestAnimationFrame(drawFrame);
            }

            videoElement.play();
            drawFrame();
        }
    </script>
</body>
</html>
