# Payment Template Variables

## Доступные переменные для подстановки

В текстах экранов **TrialPayment** и **SpecialOffer** можно использовать следующие переменные через синтаксис `{{variableName}}`.

### Основные переменные

| Переменная | Описание | Пример значения |
|------------|----------|-----------------|
| `{{trialPrice}}` | Форматированная цена триала | `$1.00`, `€5.00` |
| `{{billingPrice}}` | Форматированная цена подписки | `$14.99`, `€49.99` |
| `{{trialPeriod}}` | Период триала с интервалом | `7 days`, `1 week`, `2 weeks` |
| `{{billingPeriod}}` | Период списания с интервалом | `1 week`, `1 month`, `3 months` |
| `{{trialPeriodHyphen}}` | Период триала через дефис | `7-day`, `1-week` |

### Дополнительные переменные

| Переменная | Описание | Пример значения | Шаблон |
|------------|----------|-----------------|---------|
| `{{oldPrice}}` | Старая цена (для скидки) | `$14.99` | TrialPayment |
| `{{discountPercent}}` | Процент скидки | `94` | TrialPayment, SpecialOffer |
| `{{oldTrialPrice}}` | Старая цена триала | `$14.99` | SpecialOffer |
| `{{oldTrialPeriod}}` | Старый период триала | `7 days` | SpecialOffer |

## Где использовать

### TrialPayment экран

Переменные работают во **ВСЕХ текстовых полях** экрана, включая:

#### `tryForDays.title`
```json
{
  "text": "Try it for {{trialPeriod}}!"
}
```

#### `tryForDays.textList.items`
```json
{
  "items": [
    { "text": "Start your {{trialPeriodHyphen}} trial for just {{trialPrice}}." },
    { "text": "Then only {{billingPrice}}/{{billingPeriod}} for full access." }
  ]
}
```

#### `totalPrice.priceContainer.price`
```json
{
  "text": "{{trialPrice}}"
}
```

#### `totalPrice.priceContainer.oldPrice`
```json
{
  "text": "{{oldPrice}}"
}
```

#### `totalPrice.priceContainer.discount`
```json
{
  "text": "{{discountPercent}}% discount applied"
}
```

### SpecialOffer экран

Переменные работают во всех текстовых полях:

#### `text.title`
```json
{
  "text": "SPECIAL {{discountPercent}}% DISCOUNT"
}
```

#### `text.subtitle`
```json
{
  "text": "Only {{trialPrice}} for {{trialPeriod}}"
}
```

#### `text.description`
```json
{
  "trialPrice": { "text": "{{trialPrice}}" },
  "text": { "text": "for {{trialPeriod}}" },
  "oldTrialPrice": { "text": "{{oldTrialPrice}}" }
}
```

## Policy текст (хардкоженный)

Policy текст автоматически подставляет значения **без** использования `{{}}`:

```tsx
You also acknowledge that your {trialPeriodHyphen} introductory plan to Wit Lab LLC, 
billed at {formattedTrialPrice}, will automatically renew at {formattedBillingPrice} 
every {billingPeriodText} unless canceled before the end of the trial period.
```

**Этот текст НЕ редактируется через админку** - значения подставляются автоматически из выбранного variant.

## Примеры использования

### Пример 1: Try For Days секция
```json
{
  "tryForDays": {
    "title": {
      "text": "Try it for {{trialPeriod}}!"
    },
    "textList": {
      "items": [
        { "text": "Receive a hand-drawn sketch of your soulmate." },
        { "text": "Reveal the path with the guide." },
        { "text": "Talk to live experts and get guidance." },
        { "text": "Start your {{trialPeriodHyphen}} trial for just {{trialPrice}}." },
        { "text": "Then {{billingPrice}} every {{billingPeriod}} for full access." },
        { "text": "Cancel anytime—just 24 hours before renewal." }
      ]
    }
  }
}
```

**Результат** (для variant с trialPrice=100, price=1499, trialInterval=7, billingInterval=1):
- "Try it for 7 days!"
- "Start your 7-day trial for just $1.00."
- "Then $14.99 every 1 week for full access."

### Пример 2: Total Price секция
```json
{
  "totalPrice": {
    "priceContainer": {
      "price": { "text": "{{trialPrice}}" },
      "oldPrice": { "text": "{{oldPrice}}" },
      "discount": { "text": "{{discountPercent}}% discount applied" }
    }
  }
}
```

**Результат**:
- Price: "$1.00"
- Old Price: "$14.99"
- Discount: "94% discount applied"

## Форматирование цен

Цены автоматически форматируются с учетом валюты:
- USD: `$1.00`
- EUR: `€1.00`
- GBP: `£1.00`

## Форматирование периодов

Периоды форматируются на английском:
- `trialPeriod="DAY"`, `interval=1` → `"1 day"`
- `trialPeriod="DAY"`, `interval=7` → `"7 days"`
- `trialPeriod="WEEK"`, `interval=1` → `"1 week"`
- `trialPeriod="MONTH"`, `interval=3` → `"3 months"`

С дефисом (`trialPeriodHyphen`):
- `"1-day"`, `"7-day"`, `"1-week"`, `"3-month"`

## Важные замечания

1. **Регистр имеет значение**: используйте точное написание `{{trialPrice}}`, а не `{{TrialPrice}}`
2. **Пробелы не важны**: `{{ trialPrice }}` тоже сработает
3. **Несуществующие переменные**: если переменная не найдена, она остается как есть в тексте
4. **Пустые значения**: если значение не определено (например, `discountPercent` для variant без скидки), подставляется пустая строка

## Откуда берутся значения

Все значения загружаются из **Payment Placement API**:
- `GET /api/session/funnel/:funnelId/payment/:paymentId`

И зависят от **выбранного variant**:
- В **Trial Choice** пользователь выбирает variant → его ID сохраняется
- В **Trial Payment** используется выбранный variant (или первый по умолчанию)
- В **Special Offer** всегда используется первый variant из `main_secret_discount` placement
