<?php
/**
 * Hyvä Themes - https://hyva.io
 * Copyright © Hyvä Themes. All rights reserved.
 * See COPYING.txt for license details.
 */

declare(strict_types=1);

use Hyva\Theme\Model\ViewModelRegistry;
use Hyva\Theme\ViewModel\HeroiconsOutline;
use Hyva\Theme\ViewModel\HyvaCsp;
use Hyva\Theme\ViewModel\Store as StoreViewModel;
use Magento\Cookie\Block\Html\Notices;
use Magento\Framework\Escaper;
use Magento\Cookie\Helper\Cookie;

/** @var Notices $block */
/** @var Cookie $cookieHelper */
/** @var Escaper $escaper */
/** @var HyvaCsp $hyvaCsp */
/** @var ViewModelRegistry $viewModels */

/** @var HeroiconsOutline $heroicons */
$heroicons = $viewModels->require(HeroiconsOutline::class);

/** @var StoreViewModel $storeViewModel */
$storeViewModel = $viewModels->require(StoreViewModel::class);
?>
<?php

$cookieHelper = $block->getData('cookieHelper');
if ($cookieHelper->isCookieRestrictionModeEnabled()): ?>

<script>
    function initCookieBanner() {
        const isUserAllowedSaveCookieName = '<?= /* @noEscape */ Cookie::IS_USER_ALLOWED_SAVE_COOKIE ?>';
        const currentWebsiteId = <?= (int) $storeViewModel->getStore()->getWebsiteId() ?>;

        const isAllowedSaveCookie = () => {
            const allowedCookies = hyva.getCookie(isUserAllowedSaveCookieName);
            const allowedCookieWebsites = allowedCookies
                ? JSON.parse(unescape(allowedCookies))
                : [];

            return allowedCookieWebsites[currentWebsiteId] !== undefined
                ? !! allowedCookieWebsites[currentWebsiteId]
                : false;
        };

        return {
            showCookieBanner: false,
            cookieName: isUserAllowedSaveCookieName,
            cookieValue: '<?= /* @noEscape */ $cookieHelper->getAcceptedSaveCookiesWebsiteIds() ?>',
            cookieLifetime: '<?= /* @noEscape */ $cookieHelper->getCookieRestrictionLifetime() ?>',
            noCookiesUrl: '<?= $escaper->escapeJs($block->getUrl('cookie/index/noCookies')) ?>',
            checkAcceptCookies() {
                this.showCookieBanner = ! isAllowedSaveCookie();
            },
            hideCookieBanner() {
                this.showCookieBanner = false;
            },
            setAcceptCookies() {
                const cookieExpires = this.cookieLifetime / 60 / 60 / 24;
                hyva.setCookie(this.cookieName, this.cookieValue, cookieExpires);
                if (!hyva.getCookie(this.cookieName)) {
                    window.location.href = this.noCookiesUrl;
                } else {
                    window.dispatchEvent(new CustomEvent('user-allowed-save-cookie'));
                }
                this.showCookieBanner = false;
            }
        }
    }
    window.addEventListener('alpine:init', () => Alpine.data('initCookieBanner', initCookieBanner), {once: true})
</script>
    <?php $hyvaCsp->registerInlineScript() ?>
<section id="notice-cookie-block"
         aria-label="<?= $escaper->escapeHtmlAttr(__('We use cookies to make your experience better.')) ?>"
         x-data="initCookieBanner"
         x-init="checkAcceptCookies"
         x-defer="idle"
>
    <template x-if="showCookieBanner">
        <div role="dialog"
             aria-modal="true"
             class="container fixed py-0 right-0 bottom-0 z-30 flex max-w-full bg-gray-100
                border-t-2 border-gray-300"
        >
            <button
                @click="hideCookieBanner"
                aria-label="<?= $escaper->escapeHtmlAttr(__('Close panel')) ?>"
                title="<?= $escaper->escapeHtmlAttr(__('Close panel')) ?>"
                class="absolute right-0 top-0 p-4"
            >
                <?= $heroicons->xHtml('', 24, 24, ['aria-hidden' => 'true']); ?>
            </button>

            <div class="p-2 pr-4">
                <p class="mb-1">
                    <span class="font-semibold">
                        <?= $escaper->escapeHtml(__('We use cookies to make your experience better.')) ?>
                    </span>
                </p>
                <p class="mb-1">
                    <span>
                        <?= $escaper->escapeHtml(__('To comply with the new e-Privacy directive, we need to ask for your consent to set the cookies.')) ?>
                    </span>
                </p>
                <p class="mb-4">
                    <a href="<?= $escaper->escapeUrl($block->getPrivacyPolicyLink()) ?>"
                       class="underline">
                        <?= $escaper->escapeHtml(__('Read our policy')) ?>
                    </a>
                </p>
                <div class="my-2">
                    <button @click="setAcceptCookies"
                            id="btn-cookie-allow"
                            class="btn btn-primary"
                    >
                        <?= $escaper->escapeHtml(__('Allow Cookies')) ?>
                    </button>
                </div>
            </div>
        </div>
    </template>
</section>
<?php endif; ?>
