<?php
declare(strict_types=1);

namespace Celena\Core\Template\Tags;

use Celena\Core\Http\Request;
use Celena\Core\I18n\Translator;
use Celena\Core\Kernel;
use Celena\Core\Support\EuDetector;
use Celena\Module\Settings\Options;

/**
 * Inline-тег {gdpr_banner} — рендерит баннер согласия на cookie, если:
 *   - включён в настройках (gdpr_enabled = 1)
 *   - (опционально) посетитель из ЕС/ЕЭЗ/UK (gdpr_eu_only)
 *
 * HTML несёт начальный `hidden`-стиль — celena.js на клиенте его снимает,
 * если согласие ещё не зафиксировано в localStorage.
 */
final class GdprBannerTag
{
    public function __invoke(array $params): string
    {
        try {
            $c = Kernel::container();
            /** @var Options $options */
            $options = $c->make(Options::class);
            if ((string) $options->get('gdpr_enabled', '0') !== '1') {
                return '';
            }

            if ((string) $options->get('gdpr_eu_only', '1') === '1') {
                $request = Request::fromGlobals();
                if (!EuDetector::isInEu($request)) {
                    return '';
                }
            }

            /** @var Translator $tr */
            $tr = $c->make(Translator::class);
            $text   = (string) $options->get('gdpr_text', '');
            $accept = (string) $options->get('gdpr_accept_label', $tr->translate('admin.gdpr_accept'));
            $decline = (string) $options->get('gdpr_decline_label', $tr->translate('admin.gdpr_decline'));
            $url    = trim((string) $options->get('gdpr_privacy_url', ''));
            $more   = $tr->translate('admin.gdpr_more');
        } catch (\Throwable $e) {
            return '';
        }

        $urlHtml = $url !== ''
            ? ' <a href="' . e($url) . '" class="celena-gdpr-more">' . e($more) . '</a>'
            : '';

        return '<div class="celena-gdpr" data-gdpr hidden>'
            . '<div class="celena-gdpr-inner">'
            .   '<div class="celena-gdpr-text">' . $text . $urlHtml . '</div>'
            .   '<div class="celena-gdpr-actions">'
            .     '<button type="button" class="celena-gdpr-btn celena-gdpr-decline" data-gdpr-decline>' . e($decline) . '</button>'
            .     '<button type="button" class="celena-gdpr-btn celena-gdpr-accept" data-gdpr-accept>' . e($accept) . '</button>'
            .   '</div>'
            . '</div>'
            . '</div>';
    }
}
