// partner.jsx — Partner program route + homepage banner.
// Loaded AFTER sections.jsx, so shared atoms (Eyebrow, Display, Body,
// Reveal, Section, PrimaryButton, Rule) are available as globals.

const { useState: usePartnerState } = React;

const PARTNER_PER_SALE = 4.5;

/* -------------------- earnings calculator -------------------- */

function EarningsCalc({ c }) {
  const [n, setN] = usePartnerState(10);
  const monthly = Math.round(n * PARTNER_PER_SALE);

  const row = (label, val, last) => (
    <div style={{
      display: 'flex', alignItems: 'baseline', justifyContent: 'space-between',
      gap: 16,
      padding: '16px 0',
      borderBottom: last ? 'none' : '1px solid color-mix(in oklab, var(--bg) 16%, transparent)'
    }}>
      <span style={{ fontFamily: 'var(--sans)', fontSize: 15, color: 'color-mix(in oklab, var(--bg) 70%, transparent)' }}>{label}</span>
      <span style={{ fontFamily: 'var(--serif)', fontSize: 22, letterSpacing: '-0.01em' }}>{val}</span>
    </div>
  );

  return (
    <div className="partner-calc" style={{
      background: 'var(--ink)',
      color: 'var(--bg)',
      borderRadius: 6,
      padding: 'clamp(26px, 4vw, 44px)'
    }}>
      {row(c.calc.priceLabel, c.calc.priceVal)}
      {row(c.calc.commLabel, c.calc.commVal)}
      {row(c.calc.perLabel, c.calc.perVal, true)}

      <div style={{
        marginTop: 28,
        paddingTop: 28,
        borderTop: '1px solid color-mix(in oklab, var(--bg) 16%, transparent)'
      }}>
        <div style={{
          display: 'flex', alignItems: 'baseline', justifyContent: 'space-between',
          gap: 16, marginBottom: 18, flexWrap: 'wrap'
        }}>
          <span style={{ display: 'flex', alignItems: 'baseline', gap: 10 }}>
            <span style={{ fontFamily: 'var(--serif)', fontSize: 'clamp(30px, 4vw, 40px)', lineHeight: 1 }}>{n}</span>
            <span style={{ fontFamily: 'var(--sans)', fontSize: 15, color: 'color-mix(in oklab, var(--bg) 70%, transparent)' }}>{c.calc.sliderLabel}</span>
          </span>
          <span style={{ fontFamily: 'var(--serif)', fontSize: 'clamp(30px, 4vw, 40px)', lineHeight: 1, color: 'var(--accent)' }}>
            ${monthly} <span style={{ fontSize: 16, color: 'color-mix(in oklab, var(--bg) 60%, transparent)' }}>{c.calc.resultLabel}</span>
          </span>
        </div>
        <input
          className="partner-slider"
          type="range"
          min="1" max="50" step="1"
          value={n}
          onChange={(e) => setN(Number(e.target.value))}
          aria-label={c.calc.sliderLabel}
        />
      </div>
    </div>
  );
}

/* -------------------- request form -------------------- */

function PartnerForm({ c }) {
  const [name, setName] = usePartnerState('');
  const [contact, setContact] = usePartnerState('');
  const [done, setDone] = usePartnerState(false);

  const F = c.form;

  const inputStyle = {
    width: '100%',
    padding: '14px 16px',
    fontFamily: 'var(--sans)', fontSize: 15,
    border: '1px solid var(--rule)',
    background: 'var(--bg-alt)',
    color: 'var(--ink)',
    borderRadius: 2,
    outline: 'none'
  };

  if (done) {
    return (
      <div style={{
        border: '1px solid var(--rule)',
        borderRadius: 4,
        padding: 'clamp(28px, 4vw, 40px)',
        background: 'var(--bg-alt)'
      }}>
        <Display size="m" as="h3" style={{ marginBottom: 12 }}>{F.thanksH}</Display>
        <Body soft>{F.thanksB}</Body>
      </div>
    );
  }

  return (
    <form
      id="partner-form"
      onSubmit={(e) => { e.preventDefault(); if (name && contact) setDone(true); }}
      style={{ display: 'grid', gap: 12 }}
    >
      <input
        style={inputStyle}
        placeholder={F.name}
        value={name}
        onChange={(e) => setName(e.target.value)}
        required
        onFocus={(e) => e.target.style.borderColor = 'var(--ink)'}
        onBlur={(e) => e.target.style.borderColor = 'var(--rule)'}
      />
      <input
        style={inputStyle}
        placeholder={F.contact}
        value={contact}
        onChange={(e) => setContact(e.target.value)}
        required
        onFocus={(e) => e.target.style.borderColor = 'var(--ink)'}
        onBlur={(e) => e.target.style.borderColor = 'var(--rule)'}
      />
      <button type="submit" style={{
        marginTop: 4,
        padding: '15px 22px',
        background: 'var(--accent)', color: 'var(--accent-ink)',
        border: '1px solid var(--accent)',
        fontFamily: 'var(--sans)', fontSize: 15, fontWeight: 500,
        cursor: 'pointer',
        borderRadius: 2,
        display: 'inline-flex', alignItems: 'center', justifyContent: 'center', gap: 10,
        transition: 'background 180ms'
      }}
        onMouseOver={(e) => e.currentTarget.style.background = 'var(--accent-deep)'}
        onMouseOut={(e) => e.currentTarget.style.background = 'var(--accent)'}
      >
        {F.submit}
        <span style={{ fontFamily: 'var(--serif)', fontSize: 18, lineHeight: 1 }}>→</span>
      </button>
    </form>
  );
}

/* -------------------- full partner page -------------------- */

function PartnerPage({ t }) {
  const P = t.partner;

  const scrollToForm = () => {
    const el = document.getElementById('partner-form');
    if (el) window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - 80, behavior: 'smooth' });
  };

  return (
    <>
      {/* HERO */}
      <Section id="partner-top" bottom={false}>
        <div className="col-wide">
          <Reveal><Eyebrow>{P.eyebrow}</Eyebrow></Reveal>
          <Reveal delay={80} style={{ marginTop: 24, maxWidth: 900 }}>
            <Display as="h1" size="xl">{P.title}</Display>
          </Reveal>
          <Reveal delay={160} style={{ marginTop: 28, maxWidth: 560 }}>
            <Body soft style={{ fontSize: 19 }}>{P.sub}</Body>
          </Reveal>
          <Reveal delay={240} style={{ marginTop: 38 }}>
            <PrimaryButton onClick={scrollToForm}>{P.form.submit}</PrimaryButton>
          </Reveal>
        </div>
      </Section>

      {/* FORMAT / FIT */}
      <Section alt top={true} bottom={true}>
        <div className="col-wide partner-fit" style={{
          display: 'grid', gridTemplateColumns: '1fr', gap: 'clamp(36px, 5vw, 72px)', alignItems: 'start'
        }}>
          <div>
            <Reveal><Display size="l" as="h2">{P.fitTitle}</Display></Reveal>
            <Reveal delay={100} style={{ marginTop: 24, maxWidth: 540 }}>
              <Body soft style={{ fontSize: 18 }}>{P.fitSub}</Body>
            </Reveal>
          </div>
          <Reveal delay={160}>
            <div style={{ display: 'grid', gap: 12 }}>
              {P.fitList.map((f, i) => (
                <div key={i} style={{
                  display: 'flex', alignItems: 'center', gap: 14,
                  border: '1px solid var(--rule)', borderRadius: 4,
                  background: 'var(--bg)',
                  padding: '18px 20px'
                }}>
                  <span style={{ width: 8, height: 8, borderRadius: 999, background: 'var(--accent)', flex: 'none' }}></span>
                  <span style={{ fontFamily: 'var(--sans)', fontSize: 16, color: 'var(--ink)' }}>{f}</span>
                </div>
              ))}
            </div>
          </Reveal>
        </div>
      </Section>

      {/* HOW IT WORKS */}
      <Section numeral="01" numeralSide="right">
        <div className="col-wide">
          <Reveal><Eyebrow>{P.howTitle}</Eyebrow></Reveal>
          <div className="partner-steps" style={{
            display: 'grid', gridTemplateColumns: '1fr', gap: 40,
            marginTop: 'clamp(40px, 6vw, 64px)'
          }}>
            {P.steps.map((s, i) => (
              <Reveal key={i} delay={i * 90}>
                <div style={{ display: 'grid', gridTemplateColumns: '40px 1fr', gap: 16, alignItems: 'start' }}>
                  <span style={{
                    fontFamily: 'var(--mono)', fontSize: 12, letterSpacing: '0.08em',
                    color: 'var(--accent)', paddingTop: 8
                  }}>{String(i + 1).padStart(2, '0')}</span>
                  <div>
                    <Display size="m" as="h3" style={{ marginBottom: 12 }}>{s.h}</Display>
                    <Body soft>{s.b}</Body>
                  </div>
                </div>
              </Reveal>
            ))}
          </div>
        </div>
      </Section>

      {/* EARNINGS */}
      <Section alt numeral="02" numeralSide="left">
        <div className="col-wide">
          <Reveal><Eyebrow>{P.calcTitle}</Eyebrow></Reveal>
          <Reveal delay={80} style={{ marginTop: 'clamp(32px, 5vw, 48px)' }}>
            <EarningsCalc c={P} />
          </Reveal>
          <div className="partner-stats" style={{
            display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 16,
            marginTop: 16
          }}>
            {P.stats.map((s, i) => (
              <Reveal key={i} delay={i * 90}>
                <div style={{
                  border: '1px solid var(--rule)', borderRadius: 4,
                  padding: 'clamp(20px, 3vw, 30px)', textAlign: 'center'
                }}>
                  <div style={{ fontFamily: 'var(--serif)', fontSize: 'clamp(26px, 3.4vw, 34px)', letterSpacing: '-0.01em', marginBottom: 8 }}>{s.v}</div>
                  <div style={{ fontFamily: 'var(--mono)', fontSize: 11, letterSpacing: '0.08em', textTransform: 'uppercase', color: 'var(--ink-faint)' }}>{s.l}</div>
                </div>
              </Reveal>
            ))}
          </div>
        </div>
      </Section>

      {/* ABOUT PRODUCT */}
      <Section numeral="03" numeralSide="right">
        <div className="col-wide">
          <Reveal><Eyebrow>{P.aboutTitle}</Eyebrow></Reveal>
          <div className="partner-about" style={{
            display: 'grid', gridTemplateColumns: '1fr', gap: 24,
            marginTop: 'clamp(36px, 5vw, 56px)', maxWidth: 920
          }}>
            {P.about.map((a, i) => (
              <Reveal key={i} delay={i * 80}>
                <div style={{ display: 'grid', gridTemplateColumns: '18px 1fr', gap: 16, alignItems: 'start' }}>
                  <span style={{
                    width: 8, height: 8, borderRadius: 999, background: 'var(--accent)',
                    marginTop: 11
                  }}></span>
                  <Body style={{ fontSize: 18 }}>{a}</Body>
                </div>
              </Reveal>
            ))}
          </div>
        </div>
      </Section>

      {/* CTA + FORM */}
      <Section alt>
        <div className="col-wide partner-cta" style={{
          display: 'grid', gridTemplateColumns: '1fr', gap: 'clamp(36px, 5vw, 64px)',
          alignItems: 'start'
        }}>
          <div>
            <Reveal><Display size="l" as="h2">{P.ctaTitle}</Display></Reveal>
            <Reveal delay={100} style={{ marginTop: 20, maxWidth: 440 }}>
              <Body soft style={{ fontSize: 18 }}>{P.ctaSub}</Body>
            </Reveal>
            <Reveal delay={180} style={{ marginTop: 24 }}>
              <div style={{ fontFamily: 'var(--mono)', fontSize: 12, letterSpacing: '0.06em', color: 'var(--ink-faint)' }}>{P.ctaNote}</div>
            </Reveal>
          </div>
          <Reveal delay={140}>
            <PartnerForm c={P} />
          </Reveal>
        </div>
      </Section>

      <style>{`
        .partner-slider {
          -webkit-appearance: none; appearance: none;
          width: 100%; height: 4px; border-radius: 999px;
          background: color-mix(in oklab, var(--bg) 24%, transparent);
          outline: none; cursor: pointer;
        }
        .partner-slider::-webkit-slider-thumb {
          -webkit-appearance: none; appearance: none;
          width: 24px; height: 24px; border-radius: 999px;
          background: var(--accent); border: 3px solid var(--ink);
          box-shadow: 0 0 0 1px var(--accent);
          cursor: pointer;
        }
        .partner-slider::-moz-range-thumb {
          width: 22px; height: 22px; border-radius: 999px;
          background: var(--accent); border: 3px solid var(--ink);
          cursor: pointer;
        }
        @media (min-width: 760px) {
          .partner-steps { grid-template-columns: repeat(3, 1fr) !important; gap: 40px !important; }
          .partner-about { grid-template-columns: 1fr 1fr !important; gap: 28px 48px !important; }
          .partner-cta { grid-template-columns: 1fr 1fr !important; gap: 80px !important; }
        }
        @media (max-width: 540px) {
          .partner-stats { grid-template-columns: 1fr !important; }
        }
      `}</style>
    </>
  );
}

/* -------------------- homepage banner -------------------- */

function PartnerBanner({ t, onGo }) {
  const B = t.partner.banner;
  return (
    <section style={{
      background: 'var(--ink)', color: 'var(--bg)',
      padding: 'clamp(56px, 9vw, 104px) 0',
      position: 'relative', overflow: 'hidden'
    }}>
      <div aria-hidden="true" style={{
        position: 'absolute', top: 0, bottom: 0, right: 0,
        width: 'clamp(180px, 34vw, 460px)', pointerEvents: 'none', overflow: 'hidden'
      }}>
        <img src="assets/foliage.jpg" alt="" style={{
          width: '100%', height: '100%', objectFit: 'cover', display: 'block', opacity: 0.26
        }} />
        <div style={{
          position: 'absolute', inset: 0,
          background: 'linear-gradient(270deg, transparent 0%, color-mix(in oklab, var(--ink) 55%, transparent) 45%, var(--ink) 100%)'
        }}></div>
      </div>

      <div className="col-wide" style={{ position: 'relative', zIndex: 1, maxWidth: 'min(1120px, calc(100vw - 48px))' }}>
        <Reveal>
          <div style={{
            fontFamily: 'var(--mono)', fontSize: 11, letterSpacing: '0.14em',
            textTransform: 'uppercase', color: 'var(--accent)'
          }}>{B.eyebrow}</div>
        </Reveal>
        <Reveal delay={90} style={{ marginTop: 20, maxWidth: 720 }}>
          <Display size="l" as="h2" style={{ color: 'var(--bg)' }}>{B.title}</Display>
        </Reveal>
        <Reveal delay={170} style={{ marginTop: 20, maxWidth: 520 }}>
          <Body style={{ color: 'color-mix(in oklab, var(--bg) 78%, transparent)', fontSize: 18 }}>{B.sub}</Body>
        </Reveal>
        <Reveal delay={250} style={{ marginTop: 32 }}>
          <PrimaryButton onClick={onGo}>{B.cta}</PrimaryButton>
        </Reveal>
      </div>
    </section>
  );
}

Object.assign(window, { PartnerPage, PartnerBanner });
