{#if tariffsLoading} {at("loading", {}, "Загрузка…")} {:else}
{at("tariffs_stat_total", {}, "Всего тарифов")} {tariffsCatalog.tariffs.length} {at("tariffs_stat_enabled", {}, "Включено")}: {enabledTariffs.length}
{at("tariffs_stat_default", {}, "По умолчанию")} {tariffsCatalog.default_tariff || "—"} {at("tariffs_stat_default_hint", {}, "Используется для новых подписок")}
{at("tariffs_stat_disabled", {}, "Отключено")} {disabledTariffs} {at("tariffs_stat_disabled_hint", {}, "Скрыто с витрины")}

{at("tariffs_trial_title", {}, "Trial access")}

{at( "tariffs_trial_subtitle", {}, "Configure trial duration, traffic limit, and Remnawave squads from the tariff page." )}
{boolValue("TRIAL_ENABLED", settingsDirty, settingsFieldMap) ? at("enabled", {}, "Enabled") : at("disabled", {}, "Disabled")} {#if trialDirtyCount} {at("settings_dirty_count", { count: trialDirtyCount }, `Changes: ${trialDirtyCount}`)} {settingsSaving ? at("btn_saving", {}, "Saving...") : at("btn_save", {}, "Save")} {/if}
{at("tariffs_trial_group_switch", {}, "Доступ")} {at( "tariffs_trial_group_switch_hint", {}, "Включает или выключает выдачу пробного периода пользователям." )}
{#if dirtyCount(TRIAL_SWITCH_KEYS, settingsDirty)} {at( "settings_dirty_count", { count: dirtyCount(TRIAL_SWITCH_KEYS, settingsDirty) }, `Изменений: ${dirtyCount(TRIAL_SWITCH_KEYS, settingsDirty)}` )} {/if}
{at("tariffs_trial_enabled", {}, "Триал включён")} {#if isSettingDirty("TRIAL_ENABLED", settingsDirty)} {at("settings_badge_dirty", {}, "Изменено")} {/if} TRIAL_ENABLED
setSetting("TRIAL_ENABLED", checked)} class="admin-switch-root" > {boolValue("TRIAL_ENABLED", settingsDirty, settingsFieldMap) ? at("enabled", {}, "Включено") : at("disabled", {}, "Выключено")}
{#if isSettingDirty("TRIAL_ENABLED", settingsDirty)} resetSetting("TRIAL_ENABLED")} > {at("reset", {}, "Сбросить")} {/if}
{at("tariffs_trial_group_general", {}, "Общие настройки")} {at( "tariffs_trial_group_general_hint", {}, "Длительность пробного доступа и объём трафика, который получает пользователь." )}
{#if dirtyCount(TRIAL_GENERAL_KEYS, settingsDirty)} {at( "settings_dirty_count", { count: dirtyCount(TRIAL_GENERAL_KEYS, settingsDirty) }, `Изменений: ${dirtyCount(TRIAL_GENERAL_KEYS, settingsDirty)}` )} {/if}
{at("tariffs_trial_days", {}, "Длительность, дней")} {#if isSettingDirty("TRIAL_DURATION_DAYS", settingsDirty)} {at("settings_badge_dirty", {}, "Изменено")} {/if} TRIAL_DURATION_DAYS
setSetting("TRIAL_DURATION_DAYS", event.currentTarget.value)} /> {#if isSettingDirty("TRIAL_DURATION_DAYS", settingsDirty)} resetSetting("TRIAL_DURATION_DAYS")} > {at("reset", {}, "Сбросить")} {/if}
{at("tariffs_trial_traffic", {}, "Лимит трафика, GB")} {#if isSettingDirty("TRIAL_TRAFFIC_LIMIT_GB", settingsDirty)} {at("settings_badge_dirty", {}, "Изменено")} {/if} TRIAL_TRAFFIC_LIMIT_GB
setSetting("TRIAL_TRAFFIC_LIMIT_GB", event.currentTarget.value)} /> {#if isSettingDirty("TRIAL_TRAFFIC_LIMIT_GB", settingsDirty)} resetSetting("TRIAL_TRAFFIC_LIMIT_GB")} > {at("reset", {}, "Сбросить")} {/if}
{at("tariffs_trial_group_reset", {}, "Сброс трафика")} {at( "tariffs_trial_group_reset_hint", {}, "Стратегия, по которой Remnawave обновляет лимит трафика для пробного периода." )}
{#if dirtyCount(TRIAL_RESET_KEYS, settingsDirty)} {at( "settings_dirty_count", { count: dirtyCount(TRIAL_RESET_KEYS, settingsDirty) }, `Изменений: ${dirtyCount(TRIAL_RESET_KEYS, settingsDirty)}` )} {/if}
{at("tariffs_trial_strategy", {}, "Стратегия сброса трафика")} {#if isSettingDirty("TRIAL_TRAFFIC_STRATEGY", settingsDirty)} {at("settings_badge_dirty", {}, "Изменено")} {/if} TRIAL_TRAFFIC_STRATEGY
setSetting("TRIAL_TRAFFIC_STRATEGY", value)} /> {#if isSettingDirty("TRIAL_TRAFFIC_STRATEGY", settingsDirty)} resetSetting("TRIAL_TRAFFIC_STRATEGY")} > {at("reset", {}, "Сбросить")} {/if}
{at("tariffs_trial_group_squads", {}, "Сквады")} {at( "tariffs_trial_group_squads_hint", {}, "Сквады, которые будут назначены пользователю при активации триала." )}
{#if dirtyCount(TRIAL_SQUAD_KEYS, settingsDirty)} {at( "settings_dirty_count", { count: dirtyCount(TRIAL_SQUAD_KEYS, settingsDirty) }, `Изменений: ${dirtyCount(TRIAL_SQUAD_KEYS, settingsDirty)}` )} {/if}
{at("tariffs_trial_squads", {}, "Internal Squads для триала")} {#if isSettingDirty("TRIAL_SQUAD_UUIDS", settingsDirty)} {at("settings_badge_dirty", {}, "Изменено")} {/if} TRIAL_SQUAD_UUIDS {at( "tariffs_trial_squads_hint", {}, "Эти сквады применяются при активации триала. Если поле пустое, используются USER_SQUAD_UUIDS." )}
{#key trialSquadSelectKey} {/key} setSetting("TRIAL_SQUAD_UUIDS", event.currentTarget.value)} /> {#if isSettingDirty("TRIAL_SQUAD_UUIDS", settingsDirty)} resetSetting("TRIAL_SQUAD_UUIDS")} > {at("reset", {}, "Сбросить")} {/if}
{#each csvList("TRIAL_SQUAD_UUIDS", settingsDirty, settingsFieldMap) as uuid} {/each}

{at("tariffs_title", {}, "Каталог тарифов")}

{tariffsPath || "data/tariffs.json"}
{at("btn_refresh", {}, "Обновить")} {at("btn_create_tariff", {}, "Создать тариф")}
{#if !tariffsCatalog.tariffs.length} {at( "tariffs_catalog_empty", {}, "Каталог пуст. Добавьте первый тариф, после сохранения будет создан JSON-файл каталога." )} {:else}
{#each tariffsCatalog.tariffs as tariff}
{tariffName(tariff)} {#if tariff.key === tariffsCatalog.default_tariff} {at("status_default", {}, "Default")} {/if}
{tariff.key}
{#if tariff.enabled === false} {at("status_disabled", {}, "Выключен")} {:else} {at("status_active", {}, "Активен")} {/if}

{tariff.descriptions?.ru || tariff.descriptions?.en || at("no_description", {}, "Без описания")}

{tariff.billing_model === "traffic" ? at("tariff_model_traffic", {}, "Трафик") : at("tariff_model_periods", {}, "Периоды")} {tariffPriceSummary(tariff)} {at("tariff_squads", {}, "Squads")}: {(tariff.squad_uuids || []).length} {at("tariff_premium", {}, "Premium")}: {(tariff.premium_squad_uuids || []).length ? `${tariff.premium_monthly_gb || 0} GB` : "—"} {at("tariff_devices", {}, "Устройства")}: {tariff.hwid_device_limit ?? "env"}
tariffsStore.openEditTariff(tariff)}> {at("btn_configure", {}, "Настроить")} tariffsStore.toggleTariffEnabled(tariff)} disabled={tariffsSaving} > {tariff.enabled === false ? at("btn_enable", {}, "Включить") : at("btn_disable", {}, "Выключить")} tariffsStore.setDefaultTariff(tariff.key)} disabled={tariffsSaving || tariff.enabled === false || tariff.key === tariffsCatalog.default_tariff} > {at("btn_set_default", {}, "По умолчанию")} tariffsStore.updateState({ tariffDeleteTarget: tariff, tariffDeleteOpen: true, })} disabled={tariffsSaving} aria-label={at("btn_delete_tariff", {}, "Удалить тариф")} >
{/each}
{/if}
{at("tariffs_legacy_title", {}, "Совместимость с legacy-тарифами")} {at( "tariffs_legacy_subtitle", {}, "Старые периоды и пакеты трафика remnawave-tg-shop, которые используются только без JSON-каталога." )}{#if legacyDirtyCount} · {at( "settings_dirty_count", { count: legacyDirtyCount }, `Изменений: ${legacyDirtyCount}` )}{/if}
{#if legacyDirtyCount}
{at( "settings_dirty_count", { count: legacyDirtyCount }, `Изменений: ${legacyDirtyCount}` )} {settingsSaving ? at("btn_saving", {}, "Сохранение...") : at("btn_save", {}, "Сохранить")}
{/if}
{at("tariffs_legacy_period", {}, "Period")} {at("tariffs_legacy_enabled", {}, "Enabled")} {at("payment_rub", {}, "RUB")} {at("payment_stars", {}, "Stars")}
{#each LEGACY_PERIODS as [months, enabledKey, rubKey, starsKey]}
{months} {at("months_short", {}, "mo")}
setSetting(enabledKey, checked)} class="admin-switch-root" >
setSetting(rubKey, event.currentTarget.value)} /> setSetting(starsKey, event.currentTarget.value)} />
{/each}
{/if}