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

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

if (! $viewModels->require(DeployMode::class)->isDeveloperMode()) {
    return;
}

if (! preg_match('/-v(?<requiredVersion>[0-9.]+)$/', $block->getNameInLayout(), $m)) {
    ?>
<script>
    console.error("Unable to parse required Alpine.js version from block name \"<?= $escaper->escapeJs($block->getNameInLayout()) ?>\"");
</script>
    <?php
    if (isset($hyvaCsp)) $hyvaCsp->registerInlineScript();
    return;
}

$names = $block->getChildNames();
if (! $names) {
    return;
}
?>
<script>
    window.addEventListener('load', () => {
        const required = '<?= $escaper->escapeJs($m['requiredVersion']) ?>';
        if (Alpine && Alpine.version.localeCompare(required, 'en-GB', {numeric: true}) < 0) {
            console.error(`The current Alpine.js version is ${Alpine.version}, but version >= ${required} is required by the following extensions:`)
            console.log(<?= /** @noEscape */ json_encode(array_values($names)) ?>)
        }
    }, {once: true})
</script>
<?php if (isset($hyvaCsp)) $hyvaCsp->registerInlineScript() ?>
