/* Page 1: Хаб — Подход / Прозрачность / Роль / Процесс */
const { useState: useStateHub, useEffect: useEffectHub, useRef: useRefHub } = React;

function HubPage() {
  const rootRef = useRefHub(null);
  const active = useActiveScreen(rootRef);
  useReveal(rootRef);
  useChartFrameHints(rootRef);

  const editOpen = useEditModeBridge();
  const [tweaks, setTweak] = useTweaks({
    accent: 'blue',
    surface: 'white',
    density: 'comfy',
  });
  useEffectHub(() => { applyTweakStyles(tweaks); }, [tweaks]);

  const screens = ['ПОДХОД', 'ПРОЗРАЧНОСТЬ', 'РОЛЬ', 'ПРОЦЕСС'];

  const jump = (i) => {
    const el = rootRef.current?.querySelectorAll('.screen')[i];
    if (el && rootRef.current) smoothScrollTo(rootRef.current, el.offsetTop, 480);
  };

  return (
    <>
      <TopNav currentPage="hub" />
      <ProgressRail screens={screens} activeIdx={active} onJump={jump} />

      <div className="page" ref={rootRef}>
        <HubScreen1 />
        <HubScreen1_5 />
        <HubScreen2 onJumpProcess={() => jump(3)} />
        <HubScreen2_5 />
      </div>

      <TweaksPanel
        open={editOpen}
        tweaks={tweaks}
        onSet={setTweak}
        schema={[
          { key: 'accent', label: 'Акцент', options: [
            { value: 'blue', label: 'Синий' },
            { value: 'gold', label: 'Золото' },
            { value: 'ink',  label: 'Графит' },
          ]},
          { key: 'surface', label: 'Фон', options: [
            { value: 'white', label: 'Белый' },
            { value: 'bone',  label: 'Bone' },
            { value: 'pearl', label: 'Жемчуг' },
          ]},
          { key: 'density', label: 'Плотность', options: [
            { value: 'comfy',  label: 'Спокойная' },
            { value: 'tight',  label: 'Плотная' },
          ]},
        ]}
      />
    </>
  );
}

// ---------------- Screen 1: Hero — Подход ----------------
function HubScreen1() {
  return (
    <section className="screen" data-screen-label="01 Хаб — Подход">
      <div className="container hero-grid" style={{
        display: 'grid',
        gridTemplateRows: 'minmax(0, 1fr) auto',
        height: '100%',
        paddingTop: 78,
        paddingBottom: 66,
        gap: 28,
      }}>
        {/* TOP ROW: hero copy + avatar */}
        <div className="hero-row" style={{
          display: 'grid',
          gridTemplateColumns: '1.15fr 0.85fr',
          alignItems: 'center',
          columnGap: 48,
          minHeight: 0,
        }}>
          {/* LEFT: Headline + body packed into a single flex stack so they
              center as a group on desktop. On mobile this wrapper becomes
              display: contents, letting the avatar slot between them via order. */}
          <div className="hero-text-stack" style={{
            display: 'flex',
            flexDirection: 'column',
            justifyContent: 'center',
          }}>
            <div className="hero-headline">
              <div className="eyebrow reveal">01 · ПОДХОД · ЛИЧНЫЙ АГЕНТ ПОКУПАТЕЛЯ</div>

              <h1 className="display reveal d1" style={{
                fontSize: 'clamp(40px, 5vw, 76px)',
                lineHeight: 0.96,
                margin: '16px 0 0',
                color: 'var(--ink)',
              }}>
                Не продаю Пхукет.<br/>
                Показываю только то, что прошло мой{' '}
                <span className="accent-italic accent-blue">аудит</span>.
              </h1>
            </div>

            <div className="hero-body">
              <p className="reveal d2" style={{
                maxWidth: '52ch',
                marginTop: 18,
                fontSize: 15.5,
                lineHeight: 1.5,
                color: 'var(--ink-3)',
              }}>
                Стандартный агент работает на застройщика. Я — личный агент покупателя.
                Каждый объект из шорт-листа прошёл 50 пунктов проверки:
                финансы девелопера, реальная доходность, юридическая чистота,
                инженерия, ликвидность локации.
              </p>

              <div className="reveal d3 cta-row" style={{
                display: 'flex', alignItems: 'center', gap: 12, marginTop: 24,
              }}>
                <button className="btn ghost sm" onClick={() => navigateWithCurtain('pwa/')}>
                  <Icon.ArrowRight /> Смотреть отобранные объекты
                </button>
                <button className="btn sm" onClick={() => window.open('https://t.me/khabibullin_azamat', '_blank')}>
                  <Icon.Document /> Получить чек-лист 50 пунктов
                </button>
              </div>

              {/* Metric strip */}
              <div className="reveal d4 metric-strip" style={{
                display: 'grid', gridTemplateColumns: 'repeat(4,1fr)',
                gap: 0, marginTop: 28,
                borderTop: '1px solid var(--rule)',
                paddingTop: 12,
              }}>
                {[
                  ['50',    'Пунктов проверки',        null],
                  ['32',    'Страницы аудит-отчёта',   null],
                  ['5–7',   'Объектов в шорт-листе',   null],
                  ['4–8',   'Недель до сделки',        null],
                ].map(([n, l, sub], i) => (
                  <div key={i} style={{ paddingRight: 14 }}>
                    <div className="display" style={{ fontSize: 24, letterSpacing: '-0.04em' }}>
                      {n}
                    </div>
                    <div className="eyebrow" style={{ marginTop: 4, fontSize: 9 }}>{l}</div>
                    {sub && (
                      <div style={{
                        marginTop: 4, fontSize: 10, lineHeight: 1.3,
                        color: 'var(--ink-5)', letterSpacing: '0.04em',
                      }}>
                        {sub}
                      </div>
                    )}
                  </div>
                ))}
              </div>
            </div>
          </div>

          {/* RIGHT (desktop) / MIDDLE (mobile): Avatar tile */}
          <div className="hero-avatar reveal d2" style={{
            display: 'flex', justifyContent: 'center', alignItems: 'center',
          }}>
            <div style={{
              position: 'relative',
              width: '100%',
              maxWidth: 400,
              aspectRatio: '4/5',
              maxHeight: 'min(56vh, 520px)',
              borderRadius: 22,
              background:
                'radial-gradient(120% 100% at 50% 0%, #fff 0%, #ececea 70%, #dedede 100%)',
              border: '1px solid var(--rule)',
              overflow: 'hidden',
              display: 'grid',
              placeItems: 'center',
            }}>
              <Placeholder
                label="Видео-аватар"
                style={{
                  position: 'absolute', inset: 20, borderRadius: 14,
                  background:
                    'repeating-linear-gradient(135deg, rgba(0,0,0,0.035) 0 1px, transparent 1px 14px), #efeeea',
                  border: '1px solid var(--rule)',
                }}
              />
              <div className="avatar-badge">
                <span className="pulse"></span>
                На связи · Пхукет
              </div>
              <span className="corner tl"></span>
              <span className="corner tr"></span>
              <span className="corner bl"></span>
              <span className="corner br"></span>
            </div>
          </div>
        </div>

        {/* BOTTOM ROW: 3 segment cards in the same flow (no more overlap) */}
        <div className="segment-row reveal d5" style={{
          alignSelf: 'end',
          margin: '0 auto',
        }}>
          <SegmentCard
            num="01 · ДЛЯ ИНВЕСТОРА"
            title="Расчёт доходности"
            sub="Реальная заполняемость и средняя цена за ночь по факту 24 месяцев, прогноз выхода через 3–5 лет, расчёт окупаемости без маркетинговых гарантий застройщика."
            meta="Посмотреть циклы"
            href="kapital.html"
          />
          <SegmentCard
            num="02 · ДЛЯ ПЕРЕЕЗЖАЮЩИХ"
            title="Дом для семьи"
            sub="Юридическая чистота владения, инженерный аудит дома, радиус 15 минут до международных школ и многопрофильных госпиталей."
            meta="Периметр семьи"
            href="baza.html"
          />
          <SegmentCard
            num="03 · ДЛЯ ТРОФЕЙНЫХ"
            title="Коллекционные объекты"
            sub="Лоты, которые не попадают в открытые базы. Редкое расположение, проверенный девелопер, управление от операторов как Banyan Tree или Aman."
            meta="Отборные лоты"
            href="rezidentsiya.html"
          />
        </div>
      </div>

      <ScreenMeta index={1} total={4} tag="ПОДХОД" />
    </section>
  );
}

function SegmentCard({ num, title, sub, meta, href }) {
  const haptic = useHaptic();
  return (
    <button className="segment" onClick={() => { haptic(); navigateWithCurtain(href); }}>
      <div>
        <div className="seg-num">{num}</div>
        <div className="seg-title">{title}</div>
        <div className="seg-sub">{sub}</div>
      </div>
      <div className="seg-foot">
        <span>{meta}</span>
        <span className="seg-arrow"><Icon.ArrowUpRight size={14} /></span>
      </div>
    </button>
  );
}

// ---------------- Screen 1.5: Прозрачность ----------------
function HubScreen1_5() {
  const haptic = useHaptic();
  const steps = [
    {
      tag: 'ШАГ 01',
      cost: 'БЕСПЛАТНО',
      title: 'Чек-лист 50 пунктов',
      body: 'PDF-документ с моим списком проверок и 30-минутный разбор ваших уже выбранных объектов. Без обязательств.',
      icon: <Icon.Document size={20} />,
      cta: 'Получить чек-лист',
      tg: 'Здравствуйте! Хочу получить чек-лист 50 пунктов и разбор моих объектов.',
    },
    {
      tag: 'ШАГ 02',
      cost: 'ИЗ БЮДЖЕТА ПРОДАВЦА',
      title: 'Полное сопровождение покупки',
      body: 'Комиссия стандартная, уже зашита в цену объекта — для вас покупка не дороже, чем напрямую. Если объект не проходит мою проверку, я говорю об этом, даже когда теряю сделку.',
      icon: <Icon.Handshake size={20} />,
      cta: 'Обсудить сделку',
      tg: 'Здравствуйте! Хочу обсудить покупку и сопровождение сделки на Пхукете.',
    },
    {
      tag: 'ШАГ 03',
      cost: '70 000 — 180 000 ฿',
      title: 'Углублённый аудит выбранного объекта',
      body: 'Полная проверка по 50 пунктам, отчёт PDF на 32 страницы, юридическое заключение партнёра — лицензированного тайского адвоката. При покупке через меня — стоимость зачитывается в комиссию.',
      icon: <Icon.Shield size={20} />,
      cta: 'Заказать аудит',
      tg: 'Здравствуйте! Хочу заказать углублённый аудит объекта.',
    },
  ];

  return (
    <section className="screen" data-screen-label="01.5 Хаб — Прозрачность"
             style={{ background: 'var(--bg-soft)' }}>
      <div className="container" style={{
        height: '100%',
        display: 'grid',
        gridTemplateRows: 'auto 1fr auto',
        paddingTop: 100, paddingBottom: 80,
      }}>
        <div>
          <div className="eyebrow reveal">01.5 · ПРОЗРАЧНОСТЬ</div>
          <h2 className="display reveal d1" style={{
            fontSize: 'clamp(40px, 5vw, 76px)',
            lineHeight: 0.96,
            margin: '18px 0 0',
            color: 'var(--ink)',
            maxWidth: '22ch',
          }}>
            Как я{' '}
            <span className="accent-italic accent-blue">
              работаю
            </span>
            {' '}и сколько это стоит.
          </h2>
          <p className="reveal d2" style={{
            maxWidth: '60ch', marginTop: 22,
            fontSize: 16, lineHeight: 1.55, color: 'var(--ink-3)',
          }}>
            Я личный агент покупателя — представляю ваши интересы, не интересы
            застройщика. Стандартный агент Пхукета работает на застройщика,
            и в моменте проблем вы остаётесь один.
          </p>
        </div>

        <div className="reveal d3 transparency-grid" style={{
          display: 'grid',
          gridTemplateColumns: 'repeat(3, 1fr)',
          gap: 0,
          marginTop: 48,
          borderTop: '1px solid var(--rule-2)',
          alignContent: 'start',
        }}>
          {steps.map((s, i) => (
            <div key={s.tag} className={`reveal d${i+1}`}
              onClick={() => { haptic(); window.open('https://t.me/khabibullin_azamat?text=' + encodeURIComponent(s.tg || s.cta), '_blank'); }}
              style={{
              padding: '32px 26px',
              borderRight: i < steps.length - 1 ? '1px solid var(--rule-2)' : 'none',
              borderBottom: '1px solid var(--rule-2)',
              display: 'flex', flexDirection: 'column',
              cursor: 'pointer',
              background: '#fff',
            }}>
              <div style={{
                display: 'flex', justifyContent: 'space-between', alignItems: 'center',
                fontFamily: 'var(--mono)', fontSize: 10, letterSpacing: '0.2em',
                color: 'var(--ink-4)',
              }}>
                <span>{s.tag}</span>
                <span style={{ color: 'var(--accent)' }}>{s.icon}</span>
              </div>
              <div className="eyebrow" style={{ marginTop: 10, color: 'var(--accent)' }}>
                {s.cost}
              </div>
              <h3 className="display" style={{
                fontSize: 22, lineHeight: 1.18, letterSpacing: '-0.025em',
                margin: '14px 0 0', fontWeight: 500, color: 'var(--ink)',
              }}>
                {s.title}
              </h3>
              <p style={{
                marginTop: 12, fontSize: 14, lineHeight: 1.55,
                color: 'var(--ink-4)',
              }}>
                {s.body}
              </p>
              <div style={{ flex: 1 }} />
              <div style={{
                marginTop: 22, paddingTop: 14,
                borderTop: '1px solid var(--rule)',
                display: 'flex', justifyContent: 'space-between',
                fontFamily: 'var(--mono)', fontSize: 10, letterSpacing: '0.18em',
                color: 'var(--ink-3)',
                textTransform: 'uppercase',
              }}>
                <span>{s.cta}</span>
                <Icon.ArrowUpRight size={12} />
              </div>
            </div>
          ))}
        </div>

        <div className="reveal d4 cta-row" style={{
          display: 'flex', justifyContent: 'space-between', alignItems: 'center',
          marginTop: 32, gap: 24, flexWrap: 'wrap',
        }}>
          <div style={{
            fontFamily: 'var(--mono)', fontSize: 11,
            letterSpacing: '0.2em', textTransform: 'uppercase',
            color: 'var(--ink-4)',
          }}>
            Кто платит — прозрачно на каждом шаге.
          </div>
          <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}>
            <button className="btn primary" onClick={() => { haptic(); window.open('https://t.me/khabibullin_azamat', '_blank'); }}>
              <Icon.Document /> Получить чек-лист
            </button>
            <button className="btn ghost" onClick={() => { haptic(); window.open('https://t.me/khabibullin_azamat', '_blank'); }}>
              Забронировать разбор
            </button>
          </div>
        </div>
      </div>

      <ScreenMeta index={2} total={4} tag="ПРОЗРАЧНОСТЬ · КТО ПЛАТИТ" />
    </section>
  );
}

// ---------------- Screen 2: Роль на рынке ----------------
function HubScreen2({ onJumpProcess }) {
  const haptic = useHaptic();
  return (
    <section className="screen" data-screen-label="02 Хаб — Роль" style={{ background: 'var(--bg-soft)' }}>
      <div className="container split-2col" style={{
        display: 'grid',
        gridTemplateColumns: '0.9fr 1.1fr',
        gap: 60,
        alignItems: 'center',
        height: '100%',
        paddingTop: 80, paddingBottom: 80,
      }}>
        {/* Expert portrait placeholder */}
        <div className="reveal">
          <div style={{
            position: 'relative',
            width: '100%',
            aspectRatio: '4/5',
            borderRadius: 20,
            overflow: 'hidden',
            border: '1px solid var(--rule)',
            background: '#e8e7e3',
          }}>
            <Placeholder
              label="Фото эксперта"
              style={{ position: 'absolute', inset: 0, border: 'none', borderRadius: 20 }}
            />
            {/* Overlay label */}
            <div style={{
              position: 'absolute',
              left: 18, top: 18,
              fontFamily: 'var(--mono)',
              fontSize: 10, letterSpacing: '0.22em',
              textTransform: 'uppercase',
              color: 'var(--ink-4)',
              background: '#fff',
              padding: '6px 10px', borderRadius: 3,
              border: '1px solid var(--rule)',
            }}>
              Личный агент · на стороне покупателя
            </div>
            <div style={{
              position: 'absolute',
              left: 18, bottom: 18, right: 18,
              display: 'flex', justifyContent: 'space-between',
              fontFamily: 'var(--mono)',
              fontSize: 10, letterSpacing: '0.2em',
              textTransform: 'uppercase',
              color: 'var(--ink-4)',
            }}>
              <span>ПХУКЕТ · ТАИЛАНД</span>
              <span>22.04.26</span>
            </div>
          </div>
        </div>

        {/* Text */}
        <div>
          <div className="eyebrow reveal">02 · РОЛЬ НА РЫНКЕ</div>

          <h2 className="display reveal d1" style={{
            fontSize: 'clamp(36px, 4.6vw, 64px)',
            lineHeight: 1.04,
            letterSpacing: '-0.035em',
            margin: '18px 0 0',
            color: 'var(--ink)',
            maxWidth: '24ch',
          }}>
            Я разобрал, как покупатели теряли деньги. <br/>
            Каждый такой случай —{' '}
            <span className="accent-italic accent-blue">
              пункт в моём чек-листе
            </span>.
          </h2>

          <p className="reveal d2" style={{
            maxWidth: '58ch', marginTop: 22,
            fontSize: 15.5, lineHeight: 1.55,
            color: 'var(--ink-3)',
          }}>
            Я начал с того, что разобрал реальные провалы — где именно люди
            потеряли депозиты, на чём их поймали. Рейды по нелегальным схемам
            владения, кейс Alicha Grand, банкротства застройщиков с потерянными
            депозитами. Каждый такой случай добавил пункт в мой чек-лист.
            Моя задача — отсечь слабые предложения до того, как вы потратите
            время и деньги на просмотр.
          </p>

          {/* 3-fact infographic */}
          <div className="reveal d3 facts-grid" style={{
            display: 'grid',
            gridTemplateColumns: 'repeat(3, 1fr)',
            gap: 0,
            marginTop: 40,
            borderTop: '1px solid var(--rule-2)',
            borderBottom: '1px solid var(--rule-2)',
          }}>
            <Fact num="ЛИЧНО"    label="Проверка"        note="Каждый объект проверен до того, как вы его увидите" />
            <Fact num="ЧЕК-ЛИСТ" label="Метод"           note="Каждый провал рынка добавил пункт проверки" divided />
            <Fact num="50"       label="Пунктов отбора"  note="Финансы · право · инженерия" divided />
          </div>

          <div className="reveal d4 cta-row" style={{ marginTop: 28, display: 'flex', gap: 12 }}>
            <button className="btn primary" onClick={() => { haptic(); onJumpProcess && onJumpProcess(); }}>
              Как я работаю — пошагово <Icon.ArrowDown />
            </button>
            <button className="btn ghost" onClick={() => navigateWithCurtain('pwa/?segment=invest')}>
              Смотреть объекты
            </button>
          </div>
        </div>
      </div>

      <ScreenMeta index={3} total={4} tag="ОТБОР · 50 ПУНКТОВ ПРОВЕРКИ" />
    </section>
  );
}

function Fact({ num, label, note, divided }) {
  return (
    <div style={{
      padding: '24px 22px',
      borderLeft: divided ? '1px solid var(--rule-2)' : 'none',
    }}>
      <div className="display" style={{
        fontSize: 44, letterSpacing: '-0.04em', lineHeight: 1,
        color: 'var(--ink)',
      }}>
        {num}
      </div>
      <div className="eyebrow" style={{ marginTop: 12 }}>{label}</div>
      <div style={{
        marginTop: 8,
        fontSize: 13, lineHeight: 1.45,
        color: 'var(--ink-4)',
      }}>
        {note}
      </div>
    </div>
  );
}

// ---------------- Screen 2.5: Процесс ----------------
function HubScreen2_5() {
  const steps = [
    { n: '01', title: 'Брифинг',          body: '30 минут на звонке. Цели, бюджет, сроки. Решаем — вам подходит мой подход или нет.' },
    { n: '02', title: 'Шорт-лист',        body: 'Подбираю 5–7 объектов из числа прошедших мой аудит. Каждый — с краткой выжимкой по 50 пунктам.' },
    { n: '03', title: 'Показ',            body: 'Личный осмотр на Пхукете 2–3 дня. Без агентов застройщика, без давления. Технический инспектор и юрист рядом.' },
    { n: '04', title: 'Аудит выбранного', body: 'Полная проверка финального объекта. Отчёт 32 страницы, юридическое заключение, расчёт окупаемости.' },
    { n: '05', title: 'Сделка',           body: 'Сопровождение от резервации до акта. Контроль платежей, проверка титула, регистрация в Земельном департаменте.' },
  ];

  return (
    <section className="screen" data-screen-label="02.5 Хаб — Процесс"
             style={{ background: 'var(--ink)', color: '#fff' }}>
      <div className="container" style={{
        height: '100%',
        display: 'grid',
        gridTemplateRows: 'auto 1fr auto',
        paddingTop: 100, paddingBottom: 80,
      }}>
        <div>
          <div className="eyebrow reveal" style={{ color: 'rgba(255,255,255,0.55)' }}>
            02.5 · ПРОЦЕСС
          </div>
          <h2 className="display reveal d1" style={{
            fontSize: 'clamp(42px, 5.4vw, 80px)',
            lineHeight: 0.96, letterSpacing: '-0.04em',
            margin: '18px 0 0', maxWidth: '22ch',
          }}>
            Сделка под{' '}
            <span className="accent-italic accent-gold">
              моим контролем
            </span>
            {' '}— пять шагов.
          </h2>
        </div>

        <div className="reveal d2 process-grid" style={{
          display: 'grid',
          gridTemplateColumns: 'repeat(5, minmax(0, 1fr))',
          gap: 0,
          marginTop: 56,
          borderTop: '1px solid rgba(255,255,255,0.14)',
          alignContent: 'start',
        }}>
          {steps.map((s, i) => (
            <div key={s.n} className={`reveal d${(i % 5) + 1}`} style={{
              padding: '30px 22px',
              borderRight: i < steps.length - 1 ? '1px solid rgba(255,255,255,0.14)' : 'none',
              borderBottom: '1px solid rgba(255,255,255,0.14)',
              display: 'flex', flexDirection: 'column',
              minHeight: 280,
            }}>
              <div style={{
                fontFamily: 'var(--mono)', fontSize: 11, letterSpacing: '0.22em',
                color: 'var(--gold)',
              }}>
                ШАГ {s.n}
              </div>
              <h3 className="display" style={{
                fontSize: 22, lineHeight: 1.18, letterSpacing: '-0.025em',
                margin: '14px 0 0', fontWeight: 500,
              }}>
                {s.title}
              </h3>
              <p style={{
                marginTop: 12, fontSize: 13.5, lineHeight: 1.55,
                color: 'rgba(255,255,255,0.65)',
              }}>
                {s.body}
              </p>
            </div>
          ))}
        </div>

        <div className="reveal d4" style={{
          marginTop: 32,
          display: 'flex', justifyContent: 'space-between', alignItems: 'center',
          gap: 24, flexWrap: 'wrap',
          fontFamily: 'var(--mono)', fontSize: 11,
          letterSpacing: '0.2em', textTransform: 'uppercase',
          color: 'rgba(255,255,255,0.55)',
        }}>
          <span>
            Сроки от первого звонка до владения —{' '}
            <span style={{ color: 'var(--gold)' }}>
              4–8 недель
            </span>.
          </span>
          <button className="btn primary"
                  style={{ background: 'var(--gold)', borderColor: 'var(--gold)', color: '#1d1d1f' }}
                  onClick={() => window.open('https://t.me/khabibullin_azamat', '_blank')}>
            Записаться на брифинг <Icon.ArrowRight />
          </button>
        </div>
      </div>

      <div style={{ color: 'rgba(255,255,255,0.35)' }}>
        <ScreenMeta index={4} total={4} tag="ПРОЦЕСС · 5 ШАГОВ" />
      </div>
    </section>
  );
}

// export
Object.assign(window, { HubPage });
