<?php
declare(strict_types=1);

/** Varsayılan vitrin teması (renk + font + layout). */
function theme_defaults(): array
{
    return [
        'bg' => '#f4f7f1',
        'bg_2' => '#e7efe0',
        'surface' => '#ffffff',
        'ink' => '#1f2a1a',
        'muted' => '#5f6d57',
        'line' => '#d5e0cc',
        'brand' => '#2f6b3a',
        'brand_dark' => '#24552d',
        'accent' => '#c6a15b',
        'btn' => '#2ec4a0',
        'btn_text' => '#ffffff',
        'footer_bg' => '#7eb8a7',
        'font' => 'Outfit',
        'display' => 'Fraunces',
        'radius' => '18',
        // Vitrin koruma (OG / WhatsApp paylaşımını etkilemez — sunucu tarafı meta ayrı)
        'block_context_menu' => '0',
        'block_select' => '0',
        'block_drag' => '0',
        'block_copy' => '0',
        'block_shortcuts' => '0',
    ];
}

/**
 * Vitrin metinleri — {site} yerinde site adı görünür.
 *
 * @return array<string,string>
 */
function theme_copy_defaults(): array
{
    return [
        // Üst menü
        'nav_home' => 'Vitrin',
        'nav_shop' => 'Mağaza',

        // Vitrin
        'home_empty' => 'Henüz ürün yok. İlk ürünü sen yükle.',

        // Footer sol / orta / sağ başlıklar
        'footer_cats_title' => 'Kategoriler',
        'footer_popular_title' => 'Popüler Aramalar',
        'footer_about_title' => 'Organik Hakkında',
        'footer_link_vitrin' => 'Organik Vitrin',
        'footer_link_contact' => 'İletişim',
        'footer_link_support' => 'Destek',
        'footer_link_shop' => 'Satıcı Mağazası',
        'footer_link_secure' => 'Güvenli Ödeme',
        'footer_url_contact' => '',
        'footer_url_support' => '',

        // Sosyal
        'social_twitter' => '',
        'social_facebook' => '',
        'social_instagram' => '',

        // Ürün sayfası — avantajlar
        'adv_section_title' => 'Doğal Avantajları',
        'adv_item_1' => "Problemsiz\nAlışveriş",
        'adv_item_2' => "%100 Güvenli\nÖdeme",
        'adv_item_3' => "Doğal Destek\nHizmeti",
        'adv_secure_title' => '{site} güvenli ödeme nasıl gerçekleştirilmektedir?',
        'adv_secure_body' => 'Ürün satın alındıktan sonra tutar, ürün alıcıya ulaşana kadar {site} güvenli havuz hesabında tutulur. Alıcıya kargo teslim edilip kontrol edilmeden, alıcı onay vermeden ödeme satıcıya aktarılamaz.',
        'adv_pay_title' => 'Ödeme Seçenekleri',
        'adv_pay_body' => 'Ödemeler {site} güvenli havuz ödeme sistemi kapsamında Havale/EFT yöntemiyle gerçekleştirilmektedir.',

        // Güvenli ödeme sayfası
        'secure_page_title' => 'Güvenli Ödeme',
        'secure_og_title' => 'Güvenli Ödeme',
        'secure_og_desc' => 'Ödeme, ürün size ulaşana kadar güvenli havuzda. Onayınız olmadan satıcıya aktarılmaz.',
        'secure_eyebrow' => 'Alıcı koruması',
        'secure_h1' => 'Güvenli havuz ödeme sistemi',
        'secure_lead' => '{site} üzerinden yapılan alışverişlerde ödemeniz, ürün size teslim edilip onaylanana kadar platformun güvenli havuz hesabında tutulur. Bu sayede hem alıcı hem satıcı güvence altındadır.',
        'secure_how_title' => 'Güvenli ödeme nasıl çalışır?',
        'secure_step1_title' => 'Ödeme alınır',
        'secure_step1_body' => 'Satın alma sonrası tutar satıcıya değil, {site} güvenli havuz hesabına aktarılır.',
        'secure_step2_title' => 'Ürün kargoya verilir',
        'secure_step2_body' => 'Satıcı ürünü hazırlar ve kargo ile alıcıya gönderir.',
        'secure_step3_title' => 'Teslim ve kontrol',
        'secure_step3_body' => 'Alıcı kargoyu teslim alır, ürünü kontrol eder.',
        'secure_step4_title' => 'Onay sonrası aktarım',
        'secure_step4_body' => 'Alıcı onay vermeden ödeme satıcıya aktarılmaz. Onaydan sonra tutar satıcıya iletilir.',
        'secure_pay_title' => 'Ödeme seçenekleri',
        'secure_pay_body' => 'Ödemeler {site} güvenli havuz ödeme sistemi kapsamında Havale / EFT yöntemiyle gerçekleştirilir. Kredi kartı veya kapıda ödeme bulunmaz; işlem banka transferi ile şeffaf şekilde tamamlanır.',
        'secure_pay_li1' => 'Ödeme yalnızca site üzerinden gösterilen IBAN bilgilerine yapılır.',
        'secure_pay_li2' => 'Tutar, teslimat ve alıcı onayı tamamlanana kadar havuzda bekler.',
        'secure_pay_li3' => 'Onaysız veya sorunlu teslimatlarda ödeme satıcıya geçmez.',
        'secure_why_title' => 'Neden güvenli havuz?',
        'secure_why1_title' => 'Alıcı güvencesi',
        'secure_why1_body' => 'Ürünü görmeden ve onaylamadan paranız satıcıya gitmez.',
        'secure_why2_title' => 'Satıcı güvencesi',
        'secure_why2_body' => 'Onaylı teslimattan sonra ödeme düzenli şekilde satıcıya aktarılır.',
        'secure_why3_title' => 'Şeffaf süreç',
        'secure_why3_body' => 'Havale/EFT kaydı ve havuz sistemi ile tüm adımlar takip edilebilir.',
        'secure_foot' => 'Sorularınız için {site} destek hattından bize ulaşabilirsiniz.',

        // Ana ilerleme çubuğu
        'chk_step_form' => 'Teslimat',
        'chk_step_pay' => 'Ödeme',
        'chk_step_done' => 'Tamam',

        // Teslimat formu — alt adımlar
        'chk_form_title' => 'TESLİMAT',
        'chk_sub_contact' => 'İletişim',
        'chk_sub_address' => 'Adres',
        'chk_sub_summary' => 'Özet',

        // İletişim
        'chk_contact_title' => 'İletişim bilgileri',
        'chk_contact_hint' => 'Sipariş ve kargo için iletişim bilgilerin.',
        'chk_label_first_name' => 'Ad',
        'chk_label_last_name' => 'Soyad',
        'chk_label_phone' => 'Telefon',
        'chk_label_tc' => 'TC Kimlik No',
        'chk_ph_phone' => '0 (5__) ___ __ __',
        'chk_ph_tc' => '11 haneli',
        'chk_btn_to_address' => 'Devam — Adres',
        'chk_hint_after_contact' => 'Sonraki adımda teslimat adresini gireceksin.',

        // Adres
        'chk_address_title' => 'Teslimat adresi',
        'chk_address_hint' => 'Ürünün gönderileceği adres.',
        'chk_label_city' => 'Şehir',
        'chk_label_district' => 'İlçe',
        'chk_label_neighborhood' => 'Mahalle',
        'chk_label_street' => 'Sokak',
        'chk_label_apartment' => 'Apartman',
        'chk_label_door' => 'Kapı No',
        'chk_label_note' => 'Not',
        'chk_ph_city' => 'Seçiniz',
        'chk_ph_district' => 'Önce şehir seçin',
        'chk_ph_neighborhood' => 'Örn. Yeşilova',
        'chk_ph_street' => 'Örn. Çiçek',
        'chk_ph_door' => 'Örn. 12/A',
        'chk_ph_optional' => 'Opsiyonel',
        'chk_btn_back' => '← Geri',
        'chk_btn_to_summary' => 'Devam — Özet',
        'chk_hint_after_address' => 'Sonraki adımda bilgilerini kontrol edeceksin.',

        // Özet
        'chk_summary_title' => 'Sipariş özeti',
        'chk_summary_hint' => 'Ödemeye geçmeden önce kontrol et. Yanlışsa geri dönüp düzeltebilirsin.',
        'chk_sum_buyer' => 'Alıcı',
        'chk_sum_phone' => 'Telefon',
        'chk_sum_tc' => 'TC',
        'chk_sum_address' => 'Adres',
        'chk_sum_note' => 'Not',
        'chk_sum_total' => 'Ödenecek tutar',
        'chk_btn_edit' => 'Düzenle',
        'chk_btn_confirm' => 'Onayla ve Öde',
        'chk_hint_after_summary' => 'Onaydan sonra IBAN ve {minutes} dakikalık ödeme süresi çıkar.',

        // Ödeme sayfası
        'pay_title' => 'ÖDEME',
        'pay_sub_transfer' => 'Havale / EFT',
        'pay_sub_receipt' => 'Dekont yükle',
        'pay_method_kicker' => 'Ödeme yöntemi',
        'pay_method_title' => 'Havale / EFT (IBAN)',
        'pay_timer_active' => 'Bu sürede havale yapıp dekont yükle',
        'pay_timer_expired' => 'Süre doldu — dekont artık kabul edilmiyor',
        'pay_timer_hint' => 'Bu sürede havale yapıp dekontunu yükle. Geçerli dekont ve doğru tutar gerekli.',
        'pay_order_no_label' => 'Sipariş No:',
        'pay_label_bank' => 'Banka',
        'pay_label_account' => 'Hesap adı',
        'pay_label_iban' => 'IBAN',
        'pay_label_amount' => 'Tutar',
        'pay_label_delivery' => 'Teslimat',
        'pay_order_no_note' => 'Açıklamaya sipariş no yaz:',
        'pay_btn_copy_iban' => 'IBAN Kopyala',
        'pay_btn_copy_order' => 'Sipariş No Kopyala',
        'pay_copied' => 'Kopyalandı',
        'pay_receipt_title' => 'Dekont yükle',
        'pay_receipt_hint' => 'Havale/EFT sonrası dekontu yükle (PDF veya fotoğraf). Tutarın net görünmesine dikkat et.',
        'pay_receipt_btn' => 'İncele ve Tamamla',
        'pay_file_pick' => 'Dosya seç',
        'pay_file_types' => 'PDF · JPG · PNG · WEBP',
        'pay_expired_hint' => 'Ödeme süresi doldu. Bu sipariş için yeni dekont yüklenemez.',

        // Tamamlandı
        'pay_done_title' => 'TAMAMLANDI',
        'pay_done_ok' => 'Dekont doğrulandı',
        'pay_done_pending' => 'Ödeme tutarı kontrol edildikten sonra siparişiniz onaylanacaktır.',
        'pay_done_note' => 'Siparişiniz onaylandıktan sonra kargoya verildiğinde SMS ile sizi bilgilendireceğiz.',
        'pay_done_order_no' => 'Sipariş Numarası:',
        'pay_done_hint' => 'Geçerli dekont alındı — ödeme kontrolü bekleniyor.',
        'pay_done_shop' => 'Mağazaya Dön',
    ];
}

/** @return list<array{id:string,label:string,family:string,google:string}> */
function theme_font_catalog(): array
{
    return [
        ['id' => 'Outfit', 'label' => 'Outfit', 'family' => '"Outfit", system-ui, sans-serif', 'google' => 'Outfit:wght@400;500;600;700'],
        ['id' => 'Inter', 'label' => 'Inter', 'family' => '"Inter", system-ui, sans-serif', 'google' => 'Inter:wght@400;500;600;700'],
        ['id' => 'Nunito', 'label' => 'Nunito', 'family' => '"Nunito", system-ui, sans-serif', 'google' => 'Nunito:wght@400;600;700;800'],
        ['id' => 'Rubik', 'label' => 'Rubik', 'family' => '"Rubik", system-ui, sans-serif', 'google' => 'Rubik:wght@400;500;600;700'],
        ['id' => 'Poppins', 'label' => 'Poppins', 'family' => '"Poppins", system-ui, sans-serif', 'google' => 'Poppins:wght@400;500;600;700'],
        ['id' => 'Manrope', 'label' => 'Manrope', 'family' => '"Manrope", system-ui, sans-serif', 'google' => 'Manrope:wght@400;500;600;700'],
        ['id' => 'DM Sans', 'label' => 'DM Sans', 'family' => '"DM Sans", system-ui, sans-serif', 'google' => 'DM+Sans:wght@400;500;600;700'],
        ['id' => 'Fraunces', 'label' => 'Fraunces', 'family' => '"Fraunces", Georgia, serif', 'google' => 'Fraunces:opsz,wght@9..144,500;9..144,700'],
        ['id' => 'Playfair Display', 'label' => 'Playfair Display', 'family' => '"Playfair Display", Georgia, serif', 'google' => 'Playfair+Display:wght@500;700'],
        ['id' => 'Merriweather', 'label' => 'Merriweather', 'family' => '"Merriweather", Georgia, serif', 'google' => 'Merriweather:wght@400;700'],
        ['id' => 'Lora', 'label' => 'Lora', 'family' => '"Lora", Georgia, serif', 'google' => 'Lora:wght@400;600;700'],
        ['id' => 'Libre Baskerville', 'label' => 'Libre Baskerville', 'family' => '"Libre Baskerville", Georgia, serif', 'google' => 'Libre+Baskerville:wght@400;700'],
        ['id' => 'Source Serif 4', 'label' => 'Source Serif 4', 'family' => '"Source Serif 4", Georgia, serif', 'google' => 'Source+Serif+4:opsz,wght@8..60,400;8..60,700'],
        ['id' => 'DM Serif Display', 'label' => 'DM Serif Display', 'family' => '"DM Serif Display", Georgia, serif', 'google' => 'DM+Serif+Display'],
    ];
}

/** Hazır renk paletleri. @return list<array{id:string,label:string,colors:array<string,string>}> */
function theme_presets(): array
{
    return [
        [
            'id' => 'doga',
            'label' => 'Doğa (varsayılan)',
            'colors' => [
                'bg' => '#f4f7f1', 'bg_2' => '#e7efe0', 'surface' => '#ffffff',
                'ink' => '#1f2a1a', 'muted' => '#5f6d57', 'line' => '#d5e0cc',
                'brand' => '#2f6b3a', 'brand_dark' => '#24552d', 'accent' => '#c6a15b',
                'btn' => '#2ec4a0', 'btn_text' => '#ffffff', 'footer_bg' => '#7eb8a7',
            ],
        ],
        [
            'id' => 'zeytin',
            'label' => 'Zeytin',
            'colors' => [
                'bg' => '#f3f4ef', 'bg_2' => '#e4e8dc', 'surface' => '#ffffff',
                'ink' => '#1c2418', 'muted' => '#5a6552', 'line' => '#d0d6c6',
                'brand' => '#3d5a2a', 'brand_dark' => '#2c421e', 'accent' => '#b08d3a',
                'btn' => '#4a7a32', 'btn_text' => '#ffffff', 'footer_bg' => '#5f7a4a',
            ],
        ],
        [
            'id' => 'bal',
            'label' => 'Bal',
            'colors' => [
                'bg' => '#faf6ef', 'bg_2' => '#f0e6d4', 'surface' => '#fffdf8',
                'ink' => '#2a2116', 'muted' => '#6e604c', 'line' => '#e2d4bc',
                'brand' => '#8a5a1e', 'brand_dark' => '#6b4415', 'accent' => '#d4a24a',
                'btn' => '#c4892a', 'btn_text' => '#ffffff', 'footer_bg' => '#a67c3a',
            ],
        ],
        [
            'id' => 'deniz',
            'label' => 'Deniz',
            'colors' => [
                'bg' => '#f1f6f8', 'bg_2' => '#ddebf0', 'surface' => '#ffffff',
                'ink' => '#16303a', 'muted' => '#56707a', 'line' => '#c7d8df',
                'brand' => '#1f6f7a', 'brand_dark' => '#16555d', 'accent' => '#d09a4a',
                'btn' => '#1f8a8a', 'btn_text' => '#ffffff', 'footer_bg' => '#4a8a92',
            ],
        ],
    ];
}

function theme_font_by_id(string $id): ?array
{
    foreach (theme_font_catalog() as $f) {
        if ($f['id'] === $id) {
            return $f;
        }
    }
    return null;
}

function theme_get(): array
{
    $settings = settings_get();
    $theme = $settings['theme'] ?? [];
    if (!is_array($theme)) {
        $theme = [];
    }
    return theme_normalize(array_merge(theme_defaults(), $theme));
}

function theme_save(array $theme): bool
{
    $settings = settings_get();
    $settings['theme'] = theme_normalize($theme);
    return settings_save($settings);
}

/** @return array<string,string> */
function theme_copy_get(): array
{
    $settings = settings_get();
    $raw = $settings['theme_copy'] ?? [];
    if (!is_array($raw)) {
        $raw = [];
    }
    return theme_copy_normalize($raw);
}

function theme_copy_save(array $copy): bool
{
    $settings = settings_get();
    $settings['theme_copy'] = theme_copy_normalize($copy);
    return settings_save($settings);
}

/**
 * @param array<string,mixed> $raw
 * @return array<string,string>
 */
function theme_copy_normalize(array $raw): array
{
    $defaults = theme_copy_defaults();
    $out = [];
    foreach ($defaults as $key => $default) {
        if (!array_key_exists($key, $raw)) {
            $out[$key] = $default;
            continue;
        }
        $val = trim((string) $raw[$key]);
        // URL alanları boş olabilir; diğerleri boşsa varsayılana dön
        $allowEmpty = str_starts_with($key, 'social_')
            || str_starts_with($key, 'footer_url_');
        if ($val === '' && !$allowEmpty) {
            $out[$key] = $default;
            continue;
        }
        if (mb_strlen($val) > 800) {
            $val = mb_substr($val, 0, 800);
        }
        $out[$key] = $val;
    }
    return $out;
}

/** Metin oku; {site} → site adı. */
function theme_t(string $key, ?string $fallback = null): string
{
    $copy = theme_copy_get();
    $defaults = theme_copy_defaults();
    $val = $copy[$key] ?? ($fallback ?? ($defaults[$key] ?? ''));
    $site = function_exists('site_name') ? site_name() : (defined('APP_NAME') ? APP_NAME : '');
    return str_replace('{site}', $site, (string) $val);
}

/** nl2br + escape ile metin. */
function theme_t_html(string $key, ?string $fallback = null): string
{
    return nl2br(e(theme_t($key, $fallback)), false);
}

function theme_normalize(array $raw): array
{
    $defaults = theme_defaults();
    $out = [];
    $colorKeys = ['bg', 'bg_2', 'surface', 'ink', 'muted', 'line', 'brand', 'brand_dark', 'accent', 'btn', 'btn_text', 'footer_bg'];
    foreach ($colorKeys as $key) {
        $val = strtolower(trim((string) ($raw[$key] ?? $defaults[$key])));
        if (preg_match('/^#([0-9a-f]{3}|[0-9a-f]{6})$/', $val)) {
            $out[$key] = $val;
        } else {
            $out[$key] = $defaults[$key];
        }
    }
    $font = trim((string) ($raw['font'] ?? $defaults['font']));
    $display = trim((string) ($raw['display'] ?? $defaults['display']));
    $out['font'] = theme_font_by_id($font) ? $font : $defaults['font'];
    $out['display'] = theme_font_by_id($display) ? $display : $defaults['display'];

    $radius = (int) ($raw['radius'] ?? $defaults['radius']);
    if ($radius < 0) {
        $radius = 0;
    }
    if ($radius > 24) {
        $radius = 24;
    }
    $out['radius'] = (string) $radius;

    foreach (['block_context_menu', 'block_select', 'block_drag', 'block_copy', 'block_shortcuts'] as $flag) {
        $block = $raw[$flag] ?? $defaults[$flag];
        $out[$flag] = ($block === '1' || $block === 1 || $block === true || $block === 'on') ? '1' : '0';
    }

    return $out;
}

/** Vitrinde sağ tık menüsü engellensin mi? */
function theme_blocks_context_menu(?array $theme = null): bool
{
    $theme = $theme ?? theme_get();
    return (($theme['block_context_menu'] ?? '0') === '1');
}

/**
 * Aktif koruma jetonları: context, select, drag, copy, keys.
 *
 * @return list<string>
 */
function theme_protect_tokens(?array $theme = null): array
{
    $theme = $theme ?? theme_get();
    $map = [
        'block_context_menu' => 'context',
        'block_select' => 'select',
        'block_drag' => 'drag',
        'block_copy' => 'copy',
        'block_shortcuts' => 'keys',
    ];
    $out = [];
    foreach ($map as $key => $token) {
        if (($theme[$key] ?? '0') === '1') {
            $out[] = $token;
        }
    }
    return $out;
}

function theme_protect_attr(?array $theme = null): string
{
    $tokens = theme_protect_tokens($theme);
    return $tokens ? implode(' ', $tokens) : '';
}

function theme_google_fonts_href(array $theme): string
{
    $ids = array_unique([(string) $theme['font'], (string) $theme['display']]);
    $parts = [];
    foreach ($ids as $id) {
        $f = theme_font_by_id($id);
        if ($f) {
            $parts[] = $f['google'];
        }
    }
    if (!$parts) {
        $parts = ['Outfit:wght@400;500;600;700', 'Fraunces:opsz,wght@9..144,500;9..144,700'];
    }
    return 'https://fonts.googleapis.com/css2?family=' . implode('&family=', $parts) . '&display=swap';
}

/** :root CSS değişkenleri. */
function theme_css_vars(array $theme): string
{
    $font = theme_font_by_id((string) $theme['font']);
    $display = theme_font_by_id((string) $theme['display']);
    $fontFamily = $font['family'] ?? '"Outfit", system-ui, sans-serif';
    $displayFamily = $display['family'] ?? '"Fraunces", Georgia, serif';
    $radius = (int) ($theme['radius'] ?? 0);

    $lines = [
        '--bg: ' . $theme['bg'],
        '--bg-2: ' . $theme['bg_2'],
        '--surface: ' . $theme['surface'],
        '--ink: ' . $theme['ink'],
        '--muted: ' . $theme['muted'],
        '--line: ' . $theme['line'],
        '--brand: ' . $theme['brand'],
        '--brand-dark: ' . $theme['brand_dark'],
        '--accent: ' . $theme['accent'],
        '--btn: ' . $theme['btn'],
        '--btn-text: ' . $theme['btn_text'],
        '--footer-bg: ' . $theme['footer_bg'],
        '--card: ' . $theme['surface'],
        '--radius: ' . $radius . 'px',
        '--font: ' . $fontFamily,
        '--display: ' . $displayFamily,
    ];
    return ':root{' . implode(';', $lines) . ';}';
}

/** Tema admin sekmesinde görünen metin anahtarları. @return list<string> */
function theme_tab_copy_keys(string $tab): array
{
    return match ($tab) {
        'ust' => ['nav_home', 'nav_shop', 'home_empty'],
        'footer' => [
            'footer_cats_title', 'footer_popular_title', 'footer_about_title',
            'footer_link_vitrin', 'footer_link_contact', 'footer_link_support',
            'footer_link_shop', 'footer_link_secure',
            'footer_url_contact', 'footer_url_support',
            'social_twitter', 'social_facebook', 'social_instagram',
        ],
        'urun' => [
            'adv_section_title', 'adv_item_1', 'adv_item_2', 'adv_item_3',
            'adv_secure_title', 'adv_secure_body', 'adv_pay_title', 'adv_pay_body',
        ],
        'guvenli' => [
            // Ürün detayındaki kamyon / ödeme kutuları (aynı anahtarlar Ürün sekmesinde de var)
            'adv_secure_title', 'adv_secure_body', 'adv_pay_title', 'adv_pay_body',
            'secure_page_title', 'secure_og_title', 'secure_og_desc', 'secure_eyebrow',
            'secure_h1', 'secure_lead', 'secure_how_title',
            'secure_step1_title', 'secure_step1_body', 'secure_step2_title', 'secure_step2_body',
            'secure_step3_title', 'secure_step3_body', 'secure_step4_title', 'secure_step4_body',
            'secure_pay_title', 'secure_pay_body', 'secure_pay_li1', 'secure_pay_li2', 'secure_pay_li3',
            'secure_why_title', 'secure_why1_title', 'secure_why1_body', 'secure_why2_title',
            'secure_why2_body', 'secure_why3_title', 'secure_why3_body', 'secure_foot',
        ],
        'odeme' => [
            'chk_step_form', 'chk_step_pay', 'chk_step_done',
            'chk_form_title', 'chk_sub_contact', 'chk_sub_address', 'chk_sub_summary',
            'chk_contact_title', 'chk_contact_hint',
            'chk_label_first_name', 'chk_label_last_name', 'chk_label_phone', 'chk_label_tc',
            'chk_ph_phone', 'chk_ph_tc', 'chk_btn_to_address', 'chk_hint_after_contact',
            'chk_address_title', 'chk_address_hint',
            'chk_label_city', 'chk_label_district', 'chk_label_neighborhood', 'chk_label_street',
            'chk_label_apartment', 'chk_label_door', 'chk_label_note',
            'chk_ph_city', 'chk_ph_district', 'chk_ph_neighborhood', 'chk_ph_street', 'chk_ph_door', 'chk_ph_optional',
            'chk_btn_back', 'chk_btn_to_summary', 'chk_hint_after_address',
            'chk_summary_title', 'chk_summary_hint',
            'chk_sum_buyer', 'chk_sum_phone', 'chk_sum_tc', 'chk_sum_address', 'chk_sum_note', 'chk_sum_total',
            'chk_btn_edit', 'chk_btn_confirm', 'chk_hint_after_summary',
            'pay_title', 'pay_sub_transfer', 'pay_sub_receipt',
            'pay_method_kicker', 'pay_method_title',
            'pay_timer_active', 'pay_timer_expired', 'pay_timer_hint',
            'pay_order_no_label', 'pay_label_bank', 'pay_label_account', 'pay_label_iban',
            'pay_label_amount', 'pay_label_delivery', 'pay_order_no_note',
            'pay_btn_copy_iban', 'pay_btn_copy_order', 'pay_copied',
            'pay_receipt_title', 'pay_receipt_hint', 'pay_receipt_btn',
            'pay_file_pick', 'pay_file_types', 'pay_expired_hint',
            'pay_done_title', 'pay_done_ok', 'pay_done_pending', 'pay_done_note',
            'pay_done_order_no', 'pay_done_hint', 'pay_done_shop',
        ],
        default => [],
    };
}
