// Direction study — a two-spread case study for each direction.
// Spread A: photographic opener + manifesto + attribute table.
// Spread B: cover artboard + sample interior spread, side by side.

function DirectionStudy({
  numeral, number, status, name, subtitle, openingLine, body,
  attributes, photo, photoCaption, href,
  CoverComponent, SpreadComponent,
}) {
  const statusColor = status === 'Built' ? 'var(--harbour)' : 'var(--walnut)';

  return (
    <>
      {/* ============ SPREAD A: opener ============ */}
      <div style={{
        minHeight: '100vh', display: 'grid',
        gridTemplateColumns: 'minmax(280px, 1.1fr) minmax(320px, 1fr)',
        borderTop: '1px solid var(--rule-soft)',
      }}>
        {/* left — photographic plate, full bleed */}
        <div style={{
          position: 'relative', minHeight: 'min(100vh, 820px)',
          background: '#1a1510',
          overflow: 'hidden',
        }}>
          <img src={photo} alt={name} style={{
            position: 'absolute', inset: 0,
            width: '100%', height: '100%', objectFit: 'cover',
            filter: 'saturate(0.85) brightness(0.88)',
          }} />
          <div style={{
            position: 'absolute', inset: 0,
            background: 'linear-gradient(180deg, rgba(21,17,10,0.15) 0%, rgba(21,17,10,0.55) 100%)',
          }} />

          {/* plate caption */}
          <div style={{
            position: 'absolute', bottom: 'clamp(24px, 4vw, 48px)', left: 'clamp(24px, 4vw, 48px)',
            right: 'clamp(24px, 4vw, 48px)',
            display: 'flex', justifyContent: 'space-between', alignItems: 'end',
            color: 'rgba(240, 234, 219, 0.85)',
            fontFamily: 'JetBrains Mono, monospace', fontSize: 10,
            letterSpacing: '0.25em', textTransform: 'uppercase',
          }}>
            <span>Plate № {number}</span>
            <span style={{
              fontFamily: 'Fraunces, serif', fontStyle: 'italic',
              fontSize: 13, letterSpacing: 0, textTransform: 'none',
            }}>
              {photoCaption}
            </span>
          </div>

          {/* huge numeral */}
          <div style={{
            position: 'absolute', top: 'clamp(24px, 4vw, 60px)', left: 'clamp(24px, 4vw, 60px)',
            fontFamily: 'Fraunces, serif',
            fontSize: 'clamp(140px, 22vw, 320px)',
            lineHeight: 0.82, fontStyle: 'italic', fontWeight: 300,
            color: 'rgba(240, 234, 219, 0.9)',
            letterSpacing: '-0.04em',
            textShadow: '0 2px 40px rgba(0,0,0,0.25)',
          }}>
            {numeral}
          </div>
        </div>

        {/* right — text column, paper */}
        <div className="paper-bg" style={{
          padding: 'clamp(48px, 6vw, 100px) clamp(32px, 5vw, 80px)',
          display: 'flex', flexDirection: 'column', justifyContent: 'center',
        }}>
          <div style={{
            display: 'flex', justifyContent: 'space-between', alignItems: 'center',
            fontFamily: 'JetBrains Mono, monospace', fontSize: 10,
            letterSpacing: '0.25em', textTransform: 'uppercase',
            color: 'var(--ink-mute)',
            marginBottom: 40, paddingBottom: 16,
            borderBottom: '1px solid var(--rule-soft)',
          }}>
            <span>§ {number} · Direction</span>
            <span style={{
              color: statusColor,
              border: `1px solid ${statusColor}`,
              padding: '3px 10px', borderRadius: 1,
              fontSize: 9,
            }}>
              ◆ {status}
            </span>
          </div>

          <div style={{
            fontFamily: 'JetBrains Mono, monospace', fontSize: 10,
            letterSpacing: '0.3em', textTransform: 'uppercase',
            color: 'var(--walnut)', marginBottom: 20,
          }}>
            {subtitle}
          </div>

          <div style={{
            fontFamily: 'Fraunces, serif',
            fontSize: 'clamp(52px, 6vw, 108px)',
            lineHeight: 0.92, letterSpacing: '-0.035em',
            fontWeight: 400, color: 'var(--ink)',
            marginBottom: 28,
          }}>
            {name.split(' ').map((w, i) =>
              i === 1
                ? <span key={i} style={{ fontStyle: 'italic' }}>{i ? ' ' : ''}{w}</span>
                : <React.Fragment key={i}>{i ? ' ' : ''}{w}</React.Fragment>
            )}
            <span style={{ color: 'var(--walnut)' }}>.</span>
          </div>

          <div style={{
            fontFamily: 'Fraunces, serif',
            fontSize: 'clamp(18px, 1.4vw, 22px)',
            lineHeight: 1.5, fontStyle: 'italic',
            color: 'var(--ink-soft)',
            maxWidth: 540, marginBottom: 32,
          }}>
            {openingLine}
          </div>

          <div style={{
            fontFamily: 'Fraunces, serif', fontSize: 15, lineHeight: 1.7,
            color: 'var(--ink)', maxWidth: 540,
            textAlign: 'justify', hyphens: 'auto',
            marginBottom: 40,
          }}>
            {body}
          </div>

          {/* attribute table */}
          <div style={{
            borderTop: '1px solid var(--rule-soft)',
            fontFamily: 'JetBrains Mono, monospace',
            fontSize: 11,
          }}>
            {attributes.map(([k, v]) => (
              <div key={k} style={{
                display: 'grid', gridTemplateColumns: '110px 1fr',
                padding: '12px 0',
                borderBottom: '1px solid var(--rule-soft)',
              }}>
                <span style={{ color: 'var(--ink-mute)', letterSpacing: '0.15em', textTransform: 'uppercase', fontSize: 10 }}>
                  {k}
                </span>
                <span style={{ color: 'var(--ink)' }}>{v}</span>
              </div>
            ))}
          </div>

          {href && (
            <a
              href={href}
              style={{
                display: 'inline-flex', alignItems: 'center', gap: 14,
                marginTop: 40, padding: '14px 22px',
                background: 'var(--ink)', color: 'var(--paper)',
                textDecoration: 'none',
                fontFamily: 'JetBrains Mono, monospace',
                fontSize: 11, letterSpacing: '0.25em', textTransform: 'uppercase',
                alignSelf: 'flex-start', width: 'fit-content',
                border: '1px solid var(--ink)',
                transition: 'all 180ms ease',
              }}
              onMouseEnter={e => { e.currentTarget.style.background = 'var(--walnut)'; e.currentTarget.style.borderColor = 'var(--walnut)'; }}
              onMouseLeave={e => { e.currentTarget.style.background = 'var(--ink)'; e.currentTarget.style.borderColor = 'var(--ink)'; }}
            >
              Read {name}
              <span style={{ fontFamily: 'Fraunces, serif', fontStyle: 'italic', textTransform: 'none', letterSpacing: 0, fontSize: 15 }}>→</span>
            </a>
          )}
        </div>
      </div>

      {/* ============ SPREAD B: cover + spread, large scale ============ */}
      <div className="paper-bg" style={{
        padding: 'clamp(60px, 7vw, 120px) clamp(32px, 5vw, 80px)',
        borderTop: '1px solid var(--rule-soft)',
      }}>
        <div style={{
          display: 'flex', justifyContent: 'space-between', alignItems: 'baseline',
          fontFamily: 'JetBrains Mono, monospace', fontSize: 10,
          letterSpacing: '0.25em', textTransform: 'uppercase',
          color: 'var(--ink-mute)',
          marginBottom: 60, paddingBottom: 16,
          borderBottom: '1px solid var(--rule-soft)',
          maxWidth: 1400, margin: '0 auto 60px', width: '100%',
        }}>
          <span>§ {number}.I — Specimens</span>
          <span style={{
            fontFamily: 'Fraunces, serif', fontStyle: 'italic',
            letterSpacing: 0, textTransform: 'none', fontSize: 13,
          }}>
            {name} · Cover &amp; sample interior
          </span>
          <span>At 1:1 scale</span>
        </div>

        <div style={{ maxWidth: 1400, margin: '0 auto', width: '100%' }}>
          <div style={{
            display: 'grid',
            gridTemplateColumns: 'repeat(auto-fit, minmax(320px, 1fr))',
            gap: 'clamp(32px, 4vw, 64px)',
          }}>
            <ArtboardFrame label="Cover" number={`${number} · A`} name={name}>
              <CoverComponent />
            </ArtboardFrame>
            <ArtboardFrame label="Sample interior spread" number={`${number} · B`} name={`${name} — on Colour`}>
              <SpreadComponent />
            </ArtboardFrame>
          </div>
        </div>
      </div>
    </>
  );
}

function ArtboardFrame({ label, number, name, children }) {
  return (
    <div>
      {/* caption above */}
      <div style={{
        display: 'flex', justifyContent: 'space-between', alignItems: 'baseline',
        marginBottom: 16,
      }}>
        <div>
          <div style={{
            fontFamily: 'JetBrains Mono, monospace', fontSize: 10,
            letterSpacing: '0.25em', textTransform: 'uppercase',
            color: 'var(--ink-mute)', marginBottom: 4,
          }}>
            Fig. {number}
          </div>
          <div style={{
            fontFamily: 'Fraunces, serif', fontStyle: 'italic',
            fontSize: 16, color: 'var(--ink-soft)',
          }}>
            {label} — {name}
          </div>
        </div>
        <div style={{
          fontFamily: 'JetBrains Mono, monospace', fontSize: 9,
          letterSpacing: '0.2em', textTransform: 'uppercase',
          color: 'var(--ink-mute)',
        }}>
          600 × 800
        </div>
      </div>

      {/* artboard with subtle shadow to lift from paper */}
      <div style={{
        boxShadow: '0 2px 4px rgba(21,17,10,0.06), 0 16px 40px rgba(21,17,10,0.12)',
        border: '1px solid var(--rule)',
        background: '#fff',
        aspectRatio: '600 / 800',
        width: '100%',
        maxWidth: 600,
        position: 'relative',
        overflow: 'hidden',
      }}>
        <div style={{
          position: 'absolute', top: 0, left: 0,
          width: 600, height: 800,
          transform: 'scale(var(--artboard-scale, 1))',
          transformOrigin: 'top left',
        }}
        ref={el => {
          if (!el) return;
          const resize = () => {
            const w = el.parentElement.clientWidth;
            el.style.setProperty('--artboard-scale', (w / 600).toString());
          };
          resize();
          // Observe parent size
          if (!el.__ro) {
            el.__ro = new ResizeObserver(resize);
            el.__ro.observe(el.parentElement);
          }
        }}>
          {children}
        </div>
      </div>
    </div>
  );
}

Object.assign(window, { DirectionStudy, ArtboardFrame });
