/* global React, ReactDOM */
const { useState, useEffect, useRef, useMemo } = React;

// =============== Promo Bar ===============
function PromoBar() {
  const [t, setT] = useState({ d: 27, h: 22, m: 51, s: 36 });
  useEffect(() => {
    const id = setInterval(() => {
      setT((prev) => {
        let { d, h, m, s } = prev;
        s -= 1;
        if (s < 0) {s = 59;m -= 1;}
        if (m < 0) {m = 59;h -= 1;}
        if (h < 0) {h = 23;d -= 1;}
        if (d < 0) {d = 0;h = 0;m = 0;s = 0;}
        return { d, h, m, s };
      });
    }, 1000);
    return () => clearInterval(id);
  }, []);
  const pad = (n) => String(n).padStart(2, "0");
  return (
    <div className="promo-bar">
      <div className="promo-bar__msg">
        <span>Промо: -10% за поръчки в следващите</span>
      </div>
      <div className="promo-bar__timer">
        <span className="promo-bar__digit">{pad(t.d)}<small style={{ fontSize: 9, opacity: .7, display: "block", lineHeight: 1 }}>дни</small></span>
        <span className="promo-bar__sep">:</span>
        <span className="promo-bar__digit">{pad(t.h)}<small style={{ fontSize: 9, opacity: .7, display: "block", lineHeight: 1 }}>ч</small></span>
        <span className="promo-bar__sep">:</span>
        <span className="promo-bar__digit">{pad(t.m)}<small style={{ fontSize: 9, opacity: .7, display: "block", lineHeight: 1 }}>м</small></span>
        <span className="promo-bar__sep">:</span>
        <span className="promo-bar__digit">{pad(t.s)}<small style={{ fontSize: 9, opacity: .7, display: "block", lineHeight: 1 }}>с</small></span>
      </div>
      <button className="promo-bar__cta" onClick={() => document.querySelector("#packages")?.scrollIntoView({ behavior: "smooth" })}>Поръчай сега →</button>
    </div>);

}

// =============== Nav ===============
function Nav({ onOpenOrder }) {
  const [open, setOpen] = React.useState(false);
  const close = () => setOpen(false);
  return (
    <nav className="nav">
      <div className="nav__inner">
        <div className="nav__logo">
          <span className="nav__logo-mark"></span>
          GiveMeEmotion
        </div>
        <ul className="nav__links">
          <li><a href="#how">Как работи</a></li>
          <li><a href="#packages">Услуги</a></li>
          <li><a href="#examples">Примери</a></li>
          <li><a href="#reviews">Отзиви</a></li>
          <li><a href="#terms">Условия</a></li>
        </ul>
        <button className="nav__cta" onClick={onOpenOrder}>Поръчай сега</button>
        <button className={`nav__burger ${open ? "is-open" : ""}`} onClick={() => setOpen(!open)} aria-label="Меню">
          <span></span><span></span><span></span>
        </button>
      </div>
      {open && (
        <div className="nav__drawer">
          <ul className="nav__drawer-links">
            <li><a href="#how" onClick={close}>Как работи</a></li>
            <li><a href="#packages" onClick={close}>Услуги</a></li>
            <li><a href="#examples" onClick={close}>Примери</a></li>
            <li><a href="#reviews" onClick={close}>Отзиви</a></li>
            <li><a href="#terms" onClick={close}>Условия</a></li>
          </ul>
          <button className="btn btn--ink btn--lg nav__drawer-cta" onClick={() => { close(); onOpenOrder(); }}>Поръчай сега →</button>
        </div>
      )}
    </nav>);

}

// =============== Hero ===============
function Hero({ onOpenOrder }) {
  const [pos, setPos] = React.useState(50);
  const [drag, setDrag] = React.useState(false);
  const wrapRef = React.useRef(null);

  const updateFromX = (clientX) => {
    const r = wrapRef.current.getBoundingClientRect();
    const p = ((clientX - r.left) / r.width) * 100;
    setPos(Math.max(2, Math.min(98, p)));
  };

  React.useEffect(() => {
    if (!drag) return;
    const move = (e) => updateFromX(e.touches ? e.touches[0].clientX : e.clientX);
    const up = () => setDrag(false);
    window.addEventListener("mousemove", move);
    window.addEventListener("mouseup", up);
    window.addEventListener("touchmove", move);
    window.addEventListener("touchend", up);
    return () => {
      window.removeEventListener("mousemove", move);
      window.removeEventListener("mouseup", up);
      window.removeEventListener("touchmove", move);
      window.removeEventListener("touchend", up);
    };
  }, [drag]);

  return (
    <section className="hero hero--neon">
      <div className="hero__glow hero__glow--pink"></div>
      <div className="hero__glow hero__glow--violet"></div>
      <div className="hero__glow hero__glow--gold"></div>
      <div className="hero__noise"></div>

      <div className="shell hero__inner">
        <div className="hero__top">
          <span className="pill pill--onDark"><span className="pill__dot"></span>От снимка до арт за 5 дни</span>
          <div className="hero__rating">
            <span className="hero__rating-stars">★★★★★</span>
            <span className="hero__rating-text">5.0 · 500+ ревюта</span>
          </div>
        </div>

        <div className="hero__layout">
          <div className="hero__copy">
            <h1 className="hero__title">
              <span className="hero__word">ОТ СНИМКА.</span>
              <span className="hero__word hero__word--neon">ДО ЕМОЦИЯ.</span>
            </h1>
            <p className="hero__lead">
              Изпрати ни снимка - връщаме ти ръчно изработена дигитална карикатура за подарък, който никой няма да забрави.
            </p>
            <div className="hero__ctas">
              <button className="btn btn--neon btn--lg" onClick={onOpenOrder}>
                Започни проекта <span className="btn__arrow">→</span>
              </button>
              <a href="#examples" className="hero__link">Виж примери</a>
            </div>
            <div className="hero__metrics">
              <div className="hero__metric"><b>500+</b><span>Доволни клиенти</span></div>
              <div className="hero__metric"><b>5 дни</b><span>Срок</span></div>
              <div className="hero__metric"><b>20 €</b><span>Започва от</span></div>
            </div>
          </div>

          <div className="hero__visual">
            <div
              ref={wrapRef}
              className={`ba ${drag ? "ba--dragging" : ""}`}
              onMouseDown={(e) => { setDrag(true); updateFromX(e.clientX); }}
              onTouchStart={(e) => { setDrag(true); updateFromX(e.touches[0].clientX); }}
            >
              <img src="assets/ref-after.png" alt="След" className="ba__img ba__img--after" draggable="false" />
              <div className="ba__before-clip" style={{ width: `${pos}%` }}>
                <img src="assets/ref-before.png" alt="Преди" className="ba__img ba__img--before" draggable="false" />
              </div>
              <div className="ba__handle" style={{ left: `${pos}%` }}>
                <div className="ba__handle-line"></div>
                <div className="ba__handle-knob">
                  <span>‹</span><span>›</span>
                </div>
              </div>
              <div className="ba__label ba__label--before">ПРЕДИ</div>
              <div className="ba__label ba__label--after">СЛЕД</div>
              <div className="ba__hint">Плъзни →</div>
            </div>

          </div>
        </div>
      </div>

      <div className="hero__trust">
        <div className="hero__trust-track">
          {Array.from({length:3}).map((_,i)=>(
            <React.Fragment key={i}>
              <span className="hero__trust-item">Над 500 доволни клиенти</span>
              <span className="hero__trust-item">100% персонализирано</span>
              <span className="hero__trust-item">Защитено плащане</span>
              <span className="hero__trust-item">Доставка до офис</span>
              <span className="hero__trust-item">1 безплатна корекция</span>
              <span className="hero__trust-item">5 дни срок на изработка</span>
            </React.Fragment>
          ))}
        </div>
      </div>
    </section>);

}

// =============== Marquee ===============
function Marquee({ items, yellow }) {
  const doubled = [...items, ...items];
  return (
    <div className={`marquee ${yellow ? "marquee--yellow" : ""}`}>
      <div className="marquee__track">
        {doubled.map((it, i) => <span className="marquee__item" key={i}>{it}</span>)}
      </div>
    </div>);

}

// =============== Steps ===============
function Steps() {
  const { STEPS } = window.SITE_DATA;
  return (
    <section className="section" id="how">
      <div className="shell">
        <div className="section-head">
          <div>
            <div className="eyebrow">Процесът</div>
            <h2 className="h-section" style={{ marginTop: 18 }}>Три стъпки<br />до подаръка.</h2>
          </div>
          <p className="lede">От идея до незабравима емоция - без технически детайли, без излишно чакане. Просто разкажи за твоят "герой".</p>
        </div>
        <div className="steps">
          {STEPS.map((s) =>
          <div className="step" key={s.num}>
              <div className="step__num"><span>{s.num}</span></div>
              <h3 className="step__title">{s.title}</h3>
              <p className="step__body">{s.body}</p>
              <a className="step__cta" href="#packages">{s.cta}</a>
            </div>
          )}
        </div>
      </div>
    </section>);

}

// =============== Packages ===============
function Packages({ onOrder }) {
  const { PACKAGES, CATEGORIES } = window.SITE_DATA;
  const [cat, setCat] = useState("all");
  const filtered = cat === "all" ? PACKAGES : PACKAGES.filter((p) => p.category === cat);
  return (
    <section className="section" id="packages" style={{ background: "var(--bg-warm)" }}>
      <div className="shell">
        <div className="section-head">
          <div>
            <div className="eyebrow">Избери</div>
            <h2 className="h-section" style={{ marginTop: 18 }}>Избери<br />подаръка.</h2>
          </div>
          <p className="lede">Пет персонализирани пакета - от дигитална карикатура за 20 € до пълно комбо за 70 €. Всеки е изработен специално за твоя човек.</p>
        </div>
        <div className="pkg-tabs">
          {CATEGORIES.map((c) =>
          <button
            key={c.id}
            className={`pkg-tab ${cat === c.id ? "pkg-tab--active" : ""}`}
            onClick={() => setCat(c.id)}>
            {c.label}</button>
          )}
        </div>
        <div className="pkg-grid">
          {filtered.map((p) =>
          <div key={p.id} className={`pkg ${p.accent ? "pkg--accent" : ""} ${p.id === "combo-plus" ? "pkg--wide" : ""}`}>
              {p.badge && <span className="pkg__badge">{p.badge}</span>}
              <div className="pkg__row">
                <span className="pkg__tag">{p.tag}</span>
                <span className="pkg__tag">{p.category}</span>
              </div>
              <h3 className="pkg__title">{p.title}</h3>
              <p className="pkg__sub">{p.sub}</p>
              <div className="pkg__price">{p.price}<small>€</small></div>
              <ul className="pkg__features">
                {p.features.map((f, i) => <li key={i}>{f}</li>)}
              </ul>
              <button
              className={`btn btn--${p.cta.style} btn--block`}
              style={{ marginTop: "auto" }}
              onClick={() => onOrder(p)}>
              {p.cta.label} →</button>
            </div>
          )}
        </div>
      </div>
    </section>);

}

// =============== Examples ===============
const EXAMPLES = [
{ src: "assets/godishnina.png", title: "50 години заедно", tag: "Юбилей · Карикатура" },
{ src: "assets/kuche.png", title: "Домашен любимец", tag: "Илюстрация · Дигитална" },
{ src: "assets/pevica.png", title: "Born to Sing", tag: "Подарък · Дама" },
{ src: "assets/rejisior.png", title: "Истории, които остават", tag: "Професионалист · Постер" }];


function Examples() {
  const { SONGS } = window.SITE_DATA;
  const [playing, setPlaying] = useState(null);
  const [lightbox, setLightbox] = useState(null);

  useEffect(() => {
    const onKey = (e) => {if (e.key === "Escape") setLightbox(null);};
    window.addEventListener("keydown", onKey);
    return () => window.removeEventListener("keydown", onKey);
  }, []);

  return (
    <section className="section examples" id="examples">
      <div className="shell">
        <div className="section-head">
          <div>
            <div className="eyebrow">Вашата работа</div>
            <h2 className="h-section" style={{ marginTop: 18, color: "var(--bg)" }}>Реални<br />примери.</h2>
          </div>
          <p className="lede" style={{ color: "rgba(255,247,240,0.75)" }}>Преди и след - карикатура отгоре, оригинална снимка отдолу. Кликни на пример за пълен размер.</p>
        </div>

        <div className="gallery">
          {EXAMPLES.map((ex, i) =>
          <div key={i} className="tile" onClick={() => setLightbox(ex)}>
              <div className="tile__media">
                <img src={ex.src} alt={ex.title} loading="lazy" />
                <span className="tile__chip" style={{ top: 12, left: 12, background: "var(--yellow)", color: "var(--ink)" }}>After</span>
                <span className="tile__chip" style={{ bottom: 12, top: "auto", left: 12 }}>Before</span>
              </div>
              <div className="tile__foot">
                <span className="tile__title">{ex.title}</span>
                <span className="tile__num">№0{i + 1}</span>
              </div>
            </div>
          )}
        </div>

        <div className="songs">
          <div className="eyebrow" style={{ color: "rgba(255,255,255,0.7)", marginBottom: 20 }}>Примерни песни</div>
          {SONGS.map((s, i) =>
          <div key={i} className={`song ${playing === i ? "is-playing" : ""}`}>
              <button
              className={`song__play ${playing === i ? "is-playing" : ""}`}
              onClick={() => setPlaying(playing === i ? null : i)}
              aria-label="Play">
            </button>
              <div className="song__meta">
                <span className="song__title">{s.title}</span>
                <span className="song__sub">{s.sub}</span>
              </div>
              <div className="song__waveform">
                {Array.from({ length: 60 }).map((_, j) =>
              <span key={j} style={{ height: `${4 + Math.sin(j * 0.6 + i) * 8 + Math.random() * 16}px` }}></span>
              )}
              </div>
              <span className="song__time">{s.duration}</span>
            </div>
          )}
        </div>
      </div>
      {lightbox &&
      <div className="lightbox" onClick={() => setLightbox(null)}>
          <div className="lightbox__panel" onClick={(e) => e.stopPropagation()}>
            <button className="lightbox__close" onClick={() => setLightbox(null)}>×</button>
            <img src={lightbox.src} alt={lightbox.title} />
            <div className="lightbox__caption">
              <span>{lightbox.title}</span>
              <span>{lightbox.tag}</span>
            </div>
          </div>
        </div>
      }
    </section>);

}

// =============== Testimonials ===============
function Testimonials() {
  const { TESTIMONIALS } = window.SITE_DATA;
  return (
    <section className="section" id="reviews">
      <div className="shell">
        <div className="section-head">
          <div>
            <div className="eyebrow">Отзиви</div>
            <h2 className="h-section" style={{ marginTop: 18 }}>Какво казват<br />клиентите.</h2>
          </div>
          <div style={{ display: "flex", flexDirection: "column", gap: 8, alignItems: "flex-start" }}>
            <div className="pill pill--yellow">★ 5.0 средна оценка</div>
            <p className="lede" style={{ margin: 0 }}>Над 500 поръчки. Над 500 разплакани (от смях или щастие) клиенти.</p>
          </div>
        </div>
        <div className="tlist">
          {TESTIMONIALS.map((t) =>
          <div className="t" key={t.num}>
              <div className="t__num">№{t.num}</div>
              <p className="t__quote">{t.quote}</p>
              <div className="t__meta">
                <span className="t__stars">★★★★★</span>
                <span className="t__name">{t.name}</span>
                <span className="t__service">{t.service}</span>
              </div>
            </div>
          )}
        </div>
      </div>
    </section>);

}

// =============== Terms ===============
function Terms() {
  const { TERMS } = window.SITE_DATA;
  const [open, setOpen] = useState(null);
  return (
    <section className="section" id="terms" style={{ background: "var(--bg-warm)" }}>
      <div className="shell">
        <div className="section-head">
          <div>
            <div className="eyebrow">Правна информация</div>
            <h2 className="h-section" style={{ marginTop: 18 }}>Общи<br />условия.</h2>
          </div>
          <p className="lede">Кратко и ясно - какво да очакваш, какви са твоите права и как защитаваме твоите данни.</p>
        </div>
        <div className="terms-list">
          {TERMS.map((t, i) =>
          <details key={i} className="term" open={open === i} onToggle={(e) => {if (e.target.open) setOpen(i);else if (open === i) setOpen(null);}}>
              <summary className="term__head">
                <span className="term__num">{t.n}</span>
                <span className="term__title">{t.title}</span>
                <span className="term__icon"></span>
              </summary>
              <div className="term__body">{t.body}</div>
            </details>
          )}
        </div>
      </div>
    </section>);

}

// =============== Footer ===============
function Footer() {
  return (
    <footer className="footer">
      <div className="shell">
        <div className="footer__grid">
          <div className="footer__brand">
            <div className="nav__logo">
              <span className="nav__logo-mark"></span>
              GiveMeEmotion
            </div>
            <p className="footer__tag">Подаряваме незабравими емоции чрез ръчно изработени карикатури и персонални песни. Направено с любов в България.</p>
          </div>
          <div className="footer__col">
            <h4>Услуги</h4>
            <ul>
              <li><a href="#packages">Дигитална карикатура · 20 €</a></li>
              <li><a href="#packages">Физическа карикатура · 50 €</a></li>
              <li><a href="#packages">Персонална песен · 35 €</a></li>
              <li><a href="#packages">Карикатура + Песен · 45 €</a></li>
              <li><a href="#packages">Комбо пакет · 70 €</a></li>
            </ul>
          </div>
          <div className="footer__col">
            <h4>Информация</h4>
            <ul>
              <li><a href="#how">Как работи</a></li>
              <li><a href="#examples">Реални примери</a></li>
              <li><a href="#reviews">Отзиви</a></li>
              <li><a href="#terms">Общи условия</a></li>
              <li><a href="#terms">Поверителност</a></li>
            </ul>
          </div>
          <div className="footer__col">
            <h4>Контакт</h4>
            <ul>
              <li><a href="mailto:hi@givemeemotion.bg">hi@givemeemotion.bg</a></li>
              <li><a href="tel:+359000000000">+359 00 000 0000</a></li>
              <li>Пон–Пет · 10:00–18:00</li>
            </ul>
          </div>
        </div>
        <div className="footer__bottom">
          <span>© 2026 GiveMeEmotion · Всички права запазени</span>
          <div className="footer__socials">
            <a href="#" aria-label="Instagram">IG</a>
            <a href="#" aria-label="Facebook">FB</a>
            <a href="#" aria-label="TikTok">TT</a>
            <a href="#" aria-label="YouTube">YT</a>
          </div>
        </div>
      </div>
    </footer>);

}

Object.assign(window, { PromoBar, Nav, Hero, Marquee, Steps, Packages, Examples, Testimonials, Terms, Footer });