/* ============================================================
   data.jsx — mock domain data for FEAT-STATS-AUTO
   All numbers UTC+3 (NFR-9). Russian formatting (NFR-3).
   ============================================================ */

// thousands separator = space (design note): 558320 -> "558 320"
function fmt(n) {
  return Math.round(n).toString().replace(/\B(?=(\d{3})+(?!\d))/g, '\u00A0');
}
// currency object -> {rub, eur} amounts
function money(rub, eur) { return { rub: rub, eur: (eur === undefined ? null : eur) }; }

// "Обновлено" stamp (NFR-9 / R9), UTC+3
const FRESH_OK   = '13.06.2026, 09:42 (МСК)';
const FRESH_STALE= '12.06.2026, 04:10 (МСК)';

/* ---- Dashboard sections in FIXED order (R1, R19) ---- */
// types: A накопительный, B год-к-году, C каталог, D подписочный
const SECTIONS = [
  {
    id: 'radast-kipr', type: 'A', name: 'Радаст Кипр',
    period: 'за последние 12 месяцев',
    orders: 1284,
    sums: money(9640000, 18400),     // ₽ + € (евро-аудитория)
  },
  {
    id: 'radast-tv', type: 'B', name: 'РадасТВ',
    period: 'серия · 5 последних лет',
    years: [
      { year: 2026, current: true, orders: 412,  sums: money(3120000, 9200) },
      { year: 2025, orders: 980,  sums: money(7450000, 14800) },
      { year: 2024, orders: 1130, sums: money(8200000) },
      { year: 2023, orders: 760,  sums: money(5100000) },
      { year: 2022, orders: 540,  sums: money(3600000) },
    ],
  },
  {
    id: 'ozariny', type: 'C', name: 'Озарины',
    period: 'за последние 12 месяцев',
    eventsCount: 23,
    lastEvent: 'Озарины 2026 · Январский поток — расширенная программа с разбором кейсов',
    orders: 3240,
    sums: money(14200000, 42600),
  },
  {
    id: 'magic-rooms', type: 'D', name: 'Волшебные комнаты',
    period: 'май 2026 · последний полный месяц',
    activeSubs: 1472,
    monthOrders: 318,
    monthSum: money(558320, 2800),   // R16: ₽ + € (евро-аудитория Озаригн-Глобал)
    deltas: {
      mom: { dir: 'pos', pct: 12, abs: 34,  base: 'к апрелю 2026' },
      yoy: { dir: 'pos', pct: 28, abs: 69,  base: 'к маю 2025' },
    },
  },
];

/* ---- Events inside Озарины (type C). Sorted by start date desc (R2). ---- */
// 23 events -> 20 + 3 (R21 default порция 20). Names incl. long ones for DQ-5.
const OZARINY_EVENTS = [
  { id: 'oz-2601', name: 'Озарины 2026 · Январский поток — расширенная программа с разбором кейсов', from: '2026-01-12', to: '2026-01-30', orders: 286, sums: money(1248000, 3900), site: 'ИП · РТВ · EU' },
  { id: 'oz-2512', name: 'Озарины 2025, декабрь', from: '2025-12-03', to: '2025-12-21', orders: 240, sums: money(1090000, 3100), site: 'ИП · РТВ' },
  { id: 'oz-2511', name: 'Озарины 2025, ноябрь', from: '2025-11-05', to: '2025-11-25', orders: 198, sums: money(902000), site: 'ИП · РТВ' },
  { id: 'oz-2510', name: 'Озарины 2025 · Октябрьский интенсив для практикующих кураторов', from: '2025-10-08', to: '2025-10-27', orders: 221, sums: money(1004000, 2400), site: 'ИП · РТВ · EU' },
  { id: 'oz-2509', name: 'Озарины 2025, сентябрь', from: '2025-09-04', to: '2025-09-23', orders: 176, sums: money(798000), site: 'ИП · РТВ' },
  { id: 'oz-2508', name: 'Озарины 2025, август', from: '2025-08-06', to: '2025-08-26', orders: 162, sums: money(731000), site: 'РТВ' },
  { id: 'oz-2507', name: 'Озарины 2025, июль', from: '2025-07-09', to: '2025-07-28', orders: 154, sums: money(694000), site: 'ИП · РТВ' },
  { id: 'oz-2506', name: 'Озарины 2025, июнь', from: '2025-06-04', to: '2025-06-24', orders: 188, sums: money(852000, 2100), site: 'ИП · РТВ · EU' },
  { id: 'oz-2505', name: 'Озарины 2025, май', from: '2025-05-07', to: '2025-05-27', orders: 170, sums: money(770000), site: 'ИП · РТВ' },
  { id: 'oz-2504', name: 'Озарины 2025, апрель', from: '2025-04-02', to: '2025-04-22', orders: 145, sums: money(656000), site: 'РТВ' },
  { id: 'oz-2503', name: 'Озарины 2025, март', from: '2025-03-05', to: '2025-03-25', orders: 158, sums: money(715000), site: 'ИП · РТВ' },
  { id: 'oz-2502', name: 'Озарины 2025, февраль', from: '2025-02-05', to: '2025-02-24', orders: 132, sums: money(598000), site: 'ИП' },
  { id: 'oz-2501', name: 'Озарины 2025, январь', from: '2025-01-13', to: '2025-01-31', orders: 201, sums: money(910000, 2800), site: 'ИП · РТВ · EU' },
  { id: 'oz-2412', name: 'Озарины 2024, декабрь', from: '2024-12-04', to: '2024-12-23', orders: 224, sums: money(1015000), site: 'ИП · РТВ' },
  { id: 'oz-2411', name: 'Озарины 2024, ноябрь', from: '2024-11-06', to: '2024-11-26', orders: 196, sums: money(889000), site: 'ИП · РТВ' },
  { id: 'oz-2410', name: 'Озарины 2024, октябрь', from: '2024-10-09', to: '2024-10-28', orders: 184, sums: money(833000), site: 'РТВ' },
  { id: 'oz-2409', name: 'Озарины 2024 · Сентябрьский поток', from: '2024-09-04', to: '2024-09-24', orders: 167, sums: money(756000), site: 'ИП · РТВ' },
  { id: 'oz-2408', name: 'Озарины 2024, август', from: '2024-08-07', to: '2024-08-27', orders: 149, sums: money(675000), site: 'ИП' },
  { id: 'oz-2407', name: 'Озарины 2024, июль', from: '2024-07-03', to: '2024-07-23', orders: 158, sums: money(716000), site: 'ИП · РТВ' },
  { id: 'oz-2406', name: 'Озарины 2024, июнь', from: '2024-06-05', to: '2024-06-25', orders: 172, sums: money(779000), site: 'ИП · РТВ' },
  // ——— porция 2 (21–23) ———
  { id: 'oz-2405', name: 'Озарины 2024, май', from: '2024-05-08', to: '2024-05-28', orders: 161, sums: money(728000), site: 'РТВ' },
  { id: 'oz-2404', name: 'Озарины 2024, апрель', from: '2024-04-03', to: '2024-04-23', orders: 144, sums: money(652000), site: 'ИП' },
  { id: 'oz-2403', name: 'Озарины 2024, март', from: '2024-03-06', to: '2024-03-26', orders: 139, sums: money(629000), site: 'ИП · РТВ' },
];

/* ---- Event card breakdown (R3) — "Озарины 2026, январь" ---- */
// разрезы: по ценовому сектору и по сайту; две валюты раздельно (R3, DQ-4)
const EVENT_CARD = {
  id: 'oz-2601',
  name: 'Озарины 2026 · Январский поток — расширенная программа с разбором кейсов',
  range: '12 — 14 января 2026 · 3 дня',
  section: 'Озарины · каталог мероприятий',
  bySector: [
    { name: 'Сектор A — полная программа', count: 142, sum: money(852000), cur: 'rub' },
    { name: 'Сектор B — стандарт',          count: 98,  sum: money(294000), cur: 'rub' },
    { name: 'Сектор C — базовый',           count: 46,  sum: money(102000), cur: 'rub', retired: true },
  ],
  bySite: [
    { name: 'Ирлем-Практик', site: 'ИП · ₽',   count: 121, sum: money(726000), cur: 'rub' },
    { name: 'Ритм-Времени-ТВ', site: 'РТВ · ₽', count: 152, sum: money(522000), cur: 'rub' },
    { name: 'Озаригн-Глобал', site: 'EU · €',  count: 13,  sum: money(null, 3900), cur: 'eur' },
  ],
  // R3: для многодневных мероприятий — разрез по дням с кол-вом участников по билету «на день»
  byDay: [
    { date: '2026-01-12', label: '12 января · открытие',        participants: 198 },
    { date: '2026-01-13', label: '13 января · основной день',   participants: 245 },
    { date: '2026-01-14', label: '14 января · закрытие',         participants: 176 },
  ],
  totals: { rub: 1248000, eur: 3900, orders: 286 },
};

// zero-orders variant of the same card (R10 / state)
const EVENT_CARD_EMPTY = {
  id: 'oz-empty',
  name: 'Озарины 2026 · Февральский поток (регистрация открыта)',
  range: '05 — 24 февраля 2026',
  section: 'Озарины · каталог мероприятий',
  bySector: [
    { name: 'Сектор A — полная программа', count: 0, sum: money(0), cur: 'rub' },
    { name: 'Сектор B — стандарт',          count: 0, sum: money(0), cur: 'rub' },
    { name: 'Сектор C — базовый',           count: 0, sum: money(0), cur: 'rub' },
  ],
  bySite: [
    { name: 'Ирлем-Практик', site: 'ИП · ₽',   count: 0, sum: money(0), cur: 'rub' },
    { name: 'Ритм-Времени-ТВ', site: 'РТВ · ₽', count: 0, sum: money(0), cur: 'rub' },
  ],
  totals: { rub: 0, eur: null, orders: 0 },
};

/* ---- Events inside РадасТВ (type B). Sorted by start date desc (R2). ---- */
// B-7 (a): тот же EventsList что и для C; группировка по годам видна в WidgetB на дашборде.
const RADAST_TV_EVENTS = [
  { id: 'rt-2605', name: 'РадасТВ · Майский поток — расширенная программа', from: '2026-05-08', to: '2026-05-10', orders: 412, sums: money(3120000, 9200), site: 'ИП · РТВ · EU' },
  { id: 'rt-2511', name: 'РадасТВ · Ноябрьский интенсив', from: '2025-11-14', to: '2025-11-16', orders: 380, sums: money(2880000, 6400), site: 'ИП · РТВ · EU' },
  { id: 'rt-2505', name: 'РадасТВ · 8–10 мая 2025', from: '2025-05-08', to: '2025-05-10', orders: 600, sums: money(4570000, 8400), site: 'ИП · РТВ · EU' },
  { id: 'rt-2410', name: 'РадасТВ · Октябрьский поток 2024', from: '2024-10-04', to: '2024-10-06', orders: 540, sums: money(3960000), site: 'ИП · РТВ' },
  { id: 'rt-2405', name: 'РадасТВ · 17–19 мая 2024', from: '2024-05-17', to: '2024-05-19', orders: 590, sums: money(4240000), site: 'ИП · РТВ' },
  { id: 'rt-2311', name: 'РадасТВ · 4–6 ноября 2023', from: '2023-11-04', to: '2023-11-06', orders: 460, sums: money(3080000), site: 'ИП · РТВ' },
  { id: 'rt-2305', name: 'РадасТВ · Майский поток 2023', from: '2023-05-12', to: '2023-05-14', orders: 300, sums: money(2020000), site: 'РТВ' },
  { id: 'rt-2210', name: 'РадасТВ · Осенний интенсив 2022', from: '2022-10-15', to: '2022-10-16', orders: 280, sums: money(1870000), site: 'РТВ' },
  { id: 'rt-2205', name: 'РадасТВ · Майский поток 2022', from: '2022-05-13', to: '2022-05-15', orders: 260, sums: money(1730000), site: 'РТВ' },
];

/* ---- Events inside Радаст Кипр (type A). Sorted by start date desc (R2). ---- */
const RADAST_KIPR_EVENTS = [
  { id: 'rk-2606', name: 'Радаст Кипр · июньский ретрит', from: '2026-06-08', to: '2026-06-14', orders: 312, sums: money(2340000, 4800), site: 'ИП · РТВ · EU' },
  { id: 'rk-2604', name: 'Радаст Кипр · апрельский поток', from: '2026-04-12', to: '2026-04-18', orders: 286, sums: money(2140000, 4200), site: 'ИП · РТВ · EU' },
  { id: 'rk-2602', name: 'Радаст Кипр · февральский поток', from: '2026-02-09', to: '2026-02-15', orders: 264, sums: money(1980000, 3900), site: 'ИП · РТВ · EU' },
  { id: 'rk-2511', name: 'Радаст Кипр · ноябрьский поток 2025', from: '2025-11-10', to: '2025-11-16', orders: 232, sums: money(1740000, 3400), site: 'ИП · РТВ · EU' },
  { id: 'rk-2509', name: 'Радаст Кипр · сентябрьский поток 2025', from: '2025-09-14', to: '2025-09-20', orders: 190, sums: money(1420000, 2100), site: 'ИП · РТВ · EU' },
];

/* ---- ALL EVENTS — общий список для нижней вкладки «Мероприятия» ---- */
// Каждое событие помечается своей секцией для отображения в общем списке
function tagSection(events, sectionId, sectionName) {
  return events.map(e => ({ ...e, sectionId, sectionName }));
}
const ALL_EVENTS = [
  ...tagSection(OZARINY_EVENTS, 'ozariny', 'Озарины'),
  ...tagSection(RADAST_TV_EVENTS, 'radast-tv', 'РадасТВ'),
  ...tagSection(RADAST_KIPR_EVENTS, 'radast-kipr', 'Радаст Кипр'),
].sort((a, b) => b.from.localeCompare(a.from));

/* ---- Subscription tariffs (R18) — Волшебные комнаты ---- */
const TARIFFS = [
  { id: 't-month', name: 'На месяц', price: '990 ₽', active: 712, orders: 268, sum: money(265320), retired: false },
  { id: 't-half',  name: 'На полгода', price: '4 900 ₽', active: 470, orders: 38, sum: money(186200), retired: false },
  // R18: тариф продаётся и на Озаригн-Глобал — есть оплаты в €
  { id: 't-year',  name: 'На год', price: '8 900 ₽ / 95 €', active: 245, orders: 12, sum: money(106800, 2800), retired: false },
  { id: 't-q',     name: 'На 3 месяца', price: '2 900 ₽', active: 45, orders: 0, sum: money(0), retired: true }, // edge R18: снят с продажи, активные есть
];
const TARIFFS_TOTAL = { active: 1472, orders: 318, sum: money(558320, 2800) };

Object.assign(window, {
  fmt, money, FRESH_OK, FRESH_STALE,
  SECTIONS, OZARINY_EVENTS, RADAST_TV_EVENTS, RADAST_KIPR_EVENTS, ALL_EVENTS,
  EVENT_CARD, EVENT_CARD_EMPTY, TARIFFS, TARIFFS_TOTAL,
});
