<?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\HyvaCsp;
use Hyva\Theme\ViewModel\StoreConfig;
use Magento\Framework\Escaper;
use Magento\Framework\View\Element\Template;

/** @var Template $block */
/** @var Escaper $escaper */
/** @var ViewModelRegistry $viewModels */
/** @var HyvaCsp $hyvaCsp */

/** @var StoreConfig $storeConfig */
$storeConfig = $viewModels->require(StoreConfig::class);

$deferred = $block->getData('deferred_components') ?? [];

if ($deferredComponentsConfig = $storeConfig->getStoreConfig('hyva_theme_general/alpine_defer/deferred_components')) {
    foreach (json_decode($deferredComponentsConfig, true) ?: [] as $tuple) {
        $deferred[$tuple['selector']] = $tuple['defer_until'];
    }
}


?>
<?php if ($deferred): ?>
<script>
    for (const [selector, deferUntil] of Object.entries(<?= /** @noEscape */ json_encode($deferred) ?>)) {
        document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
    }
    //# sourceURL=alpine-defer-rules.js
</script>
<?php
    if (isset($hyvaCsp)) $hyvaCsp->registerInlineScript();
endif;
?>
