/* global React */
const { useEffect: useEffectB, useState: useStateB, useRef: useRefB } = React;

/* ============================================================
   Slide — Background / Timeline
   ============================================================ */
const SlideBackground = ({ c, cover }) => (
  <section className="tone-dark-2" data-screen-label="Background">
    <PageTop left={c.kicker} right="MOHAMED SAHBI · 16 / 21" />
    <div className="frame" style={{ paddingTop: 140, overflow: 'hidden' }}>
      <h2 className="display-black reveal reveal-1" style={{ fontSize: 72, margin: 0, whiteSpace: 'pre-line' }}>{c.title}</h2>
      <div className="timeline reveal reveal-2" style={{ marginTop: 32 }}>
        {c.items.map((it, i) => (
          <React.Fragment key={i}>
            <div className="tl-year">{it.year}</div>
            <div className="tl-body">
              <div className="tl-title">{it.title}</div>
              <div className="tl-desc">{it.desc}</div>
            </div>
          </React.Fragment>
        ))}
      </div>
    </div>
    <PageBottom left={cover.web} right="P. 16 / 21" />
  </section>
);

/* ============================================================
   Slide — Testimonials
   ============================================================ */
const SlideTestimonials = ({ c, cover }) => (
  <section className="tone-dark" data-screen-label="Testimonials">
    <PageTop left={c.kicker} right="MOHAMED SAHBI · 17 / 21" />
    <div className="frame" style={{ paddingTop: 140 }}>
      <h2 className="display-black reveal reveal-1" style={{ fontSize: 88, margin: 0, maxWidth: 1200 }}>{c.title}</h2>
      <div className="testi-grid reveal reveal-2">
        {c.items.map((t, i) => (
          <div className="testi" key={i}>
            <div className="tq">{t.q}</div>
            <div className="ta">— {t.a}</div>
          </div>
        ))}
      </div>
    </div>
    <PageBottom left={cover.web} right="P. 17 / 21" />
  </section>
);

/* ============================================================
   Slide — Pricing
   ============================================================ */
const SlidePricing = ({ c, cover }) => (
  <section className="tone-light-2" data-screen-label="Pricing">
    <PageTop left={c.kicker} right="MOHAMED SAHBI · — / 21" />
    <div className="frame" style={{ paddingTop: 140 }}>
      <div style={{ display: 'flex', alignItems: 'flex-end', justifyContent: 'space-between' }}>
        <h2 className="display-black reveal reveal-1" style={{ fontSize: 96, margin: 0, whiteSpace: 'pre-line' }}>{c.title}</h2>
        <p className="reveal reveal-2" style={{ fontSize: 18, color: 'var(--muted-on-light)', maxWidth: 360, margin: 0, fontFamily: 'var(--mono)' }}>{c.sub}</p>
      </div>
      <div className="reveal reveal-3" style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 24, marginTop: 64 }}>
        {c.tiers.map((t, i) => (
          <div key={i} style={{ padding: 40, border: '1px solid rgba(0,0,0,0.10)', background: 'rgba(255,255,255,0.6)', minHeight: 360, display: 'flex', flexDirection: 'column' }}>
            <div className="kicker-on-light" style={{ marginBottom: 16 }}>TIER · {String(i + 1).padStart(2, '0')}</div>
            <div style={{ fontFamily: 'var(--display)', fontWeight: 700, fontSize: 44, letterSpacing: '-0.02em' }}>{t.name}</div>
            <div style={{ fontFamily: 'var(--display)', fontSize: 28, color: 'var(--gold-dim)', marginTop: 24, fontWeight: 600 }}>{t.price}</div>
            <div style={{ fontFamily: 'var(--mono)', fontSize: 12, color: 'var(--muted-on-light)', marginTop: 8, letterSpacing: '0.14em', textTransform: 'uppercase' }}>{t.time}</div>
            <div style={{ flex: 1 }}></div>
            <p style={{ fontSize: 16, lineHeight: 1.5, color: 'var(--charcoal)', marginTop: 32, marginBottom: 0 }}>{t.body}</p>
          </div>
        ))}
      </div>
    </div>
    <PageBottom left={cover.web} right="P. — / 21" />
  </section>
);

/* ============================================================
   Slide — Why Me
   ============================================================ */
const SlideWhy = ({ c, cover }) => (
  <section className="tone-dark" data-screen-label="Why Me">
    <PageTop left={c.kicker} right="MOHAMED SAHBI · 19 / 21" />
    <div className="frame" style={{ paddingTop: 140 }}>
      <h2 className="display-black reveal reveal-1" style={{ fontSize: 96, margin: 0 }}>{c.title}</h2>
      <div className="why-grid reveal reveal-2">
        {c.items.map((it, i) => (
          <div className="why-block" key={i}>
            <div className="wb-num">{it.n}</div>
            <div className="wb-title">{it.t}</div>
            <div className="wb-body">{it.b}</div>
          </div>
        ))}
      </div>
    </div>
    <PageBottom left={cover.web} right="P. 19 / 21" />
  </section>
);

/* ============================================================
   Slide — Languages
   ============================================================ */
const SlideLanguages = ({ c, cover }) => (
  <section className="tone-dark-2" data-screen-label="Languages">
    <PageTop left={c.kicker} right="MOHAMED SAHBI · 20 / 21" />
    <div className="frame" style={{ paddingTop: 140 }}>
      <div style={{ display: 'flex', alignItems: 'flex-end', justifyContent: 'space-between' }}>
        <h2 className="display-black reveal reveal-1" style={{ fontSize: 88, margin: 0, whiteSpace: 'pre-line' }}>{c.title}</h2>
        <p className="reveal reveal-2" style={{ fontSize: 18, color: 'var(--muted-on-dark)', maxWidth: 420, margin: 0, fontFamily: 'var(--mono)' }}>{c.sub}</p>
      </div>
      <div className="lang-grid reveal reveal-3">
        {c.items.map((l, i) => (
          <div className="lang" key={i} style={{ '--lvl': l.lvl }}>
            <div>
              <div className="l-name">{l.name}</div>
              <div className="l-level">{l.level}</div>
            </div>
            <div className="l-bar"></div>
            <div className="l-iso">{l.iso}</div>
          </div>
        ))}
      </div>
    </div>
    <PageBottom left={cover.web} right="P. 20 / 21" />
  </section>
);

/* ============================================================
   QR — real, scannable code via api.qrserver.com
   Gold modules on dark to match the deck.
   ============================================================ */
const QRBlock = ({ url = "https://webcraftdev.com/contact", size = 280 }) => {
  const qrSrc = `https://api.qrserver.com/v1/create-qr-code/?size=${size}x${size}&format=png&qzone=1&color=C9A84C&bgcolor=0A0A0A&ecc=M&data=${encodeURIComponent(url)}`;
  return (
    <img
      src={qrSrc}
      alt={`QR code linking to ${url}`}
      width={size}
      height={size}
      style={{ display: 'block', width: size, height: size }}
    />
  );
};

/* ============================================================
   Slide — Contact
   ============================================================ */
/* Auto-detect link type from a contact-item value:
   - contains "@"     -> mailto:
   - starts with "+"  -> tel: (spaces stripped)
   - looks like a TLD -> https:// (external)
   - otherwise        -> no link (e.g. "Lauterbourg, France") */
const buildContactHref = (value) => {
  const v = String(value).trim();
  if (v.includes('@')) return { href: 'mailto:' + v, external: false };
  if (v.startsWith('+')) return { href: telHref(v), external: false };
  if (/\.[a-z]{2,}/i.test(v)) return { href: 'https://' + v.replace(/^https?:\/\//, ''), external: true };
  return null;
};

/* WhatsApp SVG glyph (matches gold theme via currentColor) */
const WhatsAppIcon = () => (
  <svg viewBox="0 0 32 32" width="20" height="20" fill="currentColor" aria-hidden="true">
    <path d="M16.003 3C9.387 3 4.01 8.378 4.01 14.992c0 2.405.717 4.65 1.945 6.532L4 29l7.642-1.932a11.917 11.917 0 0 0 4.36.83h.005c6.616 0 11.993-5.378 11.993-11.992C28 8.378 22.62 3 16.003 3zm0 21.844a9.842 9.842 0 0 1-5.013-1.376l-.36-.214-4.535 1.146 1.21-4.42-.234-.373a9.825 9.825 0 0 1-1.502-5.215c0-5.43 4.42-9.846 9.844-9.846 5.43 0 9.85 4.418 9.85 9.846 0 5.428-4.42 9.851-9.85 9.851l-.41-.04zm5.39-7.367c-.295-.148-1.747-.862-2.018-.96-.27-.099-.467-.148-.664.148-.197.295-.762.96-.935 1.158-.172.197-.345.222-.64.074-.295-.148-1.246-.46-2.374-1.466-.877-.782-1.47-1.749-1.643-2.044-.172-.295-.018-.455.13-.602.133-.133.295-.345.443-.517.148-.172.197-.295.295-.493.099-.197.05-.37-.024-.518-.074-.148-.664-1.6-.91-2.19-.24-.575-.484-.497-.664-.506l-.566-.01a1.087 1.087 0 0 0-.79.37c-.27.296-1.034 1.01-1.034 2.464 0 1.453 1.058 2.857 1.205 3.054.148.197 2.082 3.18 5.045 4.46.706.305 1.256.487 1.685.624.708.225 1.353.193 1.862.117.568-.085 1.747-.713 1.994-1.4.246-.689.246-1.279.172-1.402-.073-.122-.27-.197-.566-.345z"/>
  </svg>
);

const SlideContact = ({ c, cover }) => (
  <section className="tone-dark" data-screen-label="Contact">
    <div className="cover-grid"></div>
    <div className="cover-glow" style={{ top: '-300px', right: '-200px' }}></div>
    <PageTop left={c.kicker} right="MOHAMED SAHBI · 21 / 21" />

    <div className="frame" style={{ paddingTop: 132, paddingBottom: 132 }}>
      <div className="contact-grid">
        <div style={{ maxWidth: 880 }}>
          <div className="kicker reveal reveal-1">{c.sub}</div>
          <h2 className="display-black reveal reveal-2" style={{ fontSize: 132, margin: '20px 0 0', whiteSpace: 'pre-line', lineHeight: 0.92, letterSpacing: '-0.025em' }}>
            {c.title.split('\n').map((line, i) => (
              <div key={i} style={{ color: i === 1 ? 'var(--gold)' : 'inherit' }}>{line}</div>
            ))}
          </h2>
          <ul className="contact-list reveal reveal-3">
            {c.items.map((it, i) => {
              const link = buildContactHref(it.v);
              return (
                <li key={i}>
                  <span className="cl-key">{it.k}</span>
                  {link ? (
                    <a
                      className="cl-val cl-val-link"
                      href={link.href}
                      target={link.external ? "_blank" : undefined}
                      rel={link.external ? "noopener noreferrer" : undefined}
                    >{it.v}</a>
                  ) : (
                    <span className="cl-val">{it.v}</span>
                  )}
                </li>
              );
            })}
          </ul>
          {(c.cta || c.whatsapp) ? (
            <div className="cta-row reveal reveal-4">
              {c.cta ? (
                <a className="btn-cta" href={c.cta.url} target="_blank" rel="noopener noreferrer">
                  {c.cta.text}
                  <span className="btn-cta-arrow">→</span>
                </a>
              ) : null}
              {c.whatsapp ? (
                <a className="btn-cta btn-cta-whatsapp" href={c.whatsapp.url} target="_blank" rel="noopener noreferrer">
                  <WhatsAppIcon />
                  {c.whatsapp.text}
                </a>
              ) : null}
            </div>
          ) : null}
        </div>
        <div className="reveal reveal-3" style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: 32 }}>
          <a href={c.qrUrl || (c.cta && c.cta.url)} target="_blank" rel="noopener noreferrer" className="qr-frame" style={{ textDecoration: 'none' }}>
            <div className="qr-corner tl"></div>
            <div className="qr-corner tr"></div>
            <div className="qr-corner bl"></div>
            <div className="qr-corner br"></div>
            <QRBlock url={c.qrUrl || "https://webcraftdev.com/contact"} />
          </a>
          <div style={{ fontFamily: 'var(--mono)', fontSize: 13, letterSpacing: '0.18em', textTransform: 'uppercase', color: 'var(--gold)', textAlign: 'center', whiteSpace: 'pre-line', lineHeight: 1.5 }}>
            {c.qrLabel}
          </div>
        </div>
      </div>
    </div>

    <div className="page-chrome-bottom">
      <Logo />
      <a className="muted chrome-link" href={WEBCRAFTDEV_URL} target="_blank" rel="noopener noreferrer">{c.footer}</a>
    </div>
  </section>
);

Object.assign(window, {
  SlideBackground, SlideTestimonials, SlidePricing,
  SlideWhy, SlideLanguages, SlideContact, QRBlock,
});
