// Dividers.jsx — mathematical diagram-style section dividers.
// Each divider is a full-bleed horizontal band with:
//   · a 1px rule (TEF pattern)
//   · mono axis labels + tick marks
//   · a construction-line SVG plot
//   · an eyebrow-labelled equation on the left
// Colors: electric lime for the curve, ember red for callouts, dust for gridlines.

function DividerFrame({ eyebrow, equation, caption, children, height = 220 }) {
  return (
    <div style={{
      position: 'relative',
      borderTop: '1px solid var(--line)',
      borderBottom: '1px solid var(--line)',
      padding: '28px 80px',
      background: 'var(--void-2)',
    }}>
      <div style={{ display: 'grid', gridTemplateColumns: '320px 1fr 220px', gap: 40, alignItems: 'center' }}>
        <div>
          <div className="eyebrow" style={{ color: 'var(--electric-2)', marginBottom: 10 }}>{eyebrow}</div>
          <div style={{
            fontFamily: 'var(--font-mono)', fontSize: 18, color: 'var(--fg-strong)',
            letterSpacing: '0.02em', fontStyle: 'italic',
          }} dangerouslySetInnerHTML={{ __html: equation }} />
        </div>
        <div style={{ height, position: 'relative' }}>
          {children}
        </div>
        <div className="mono" style={{ color: 'var(--fg-faint)', textAlign: 'right', fontSize: 11, lineHeight: 1.6, whiteSpace: 'pre-line' }}>
          {caption}
        </div>
      </div>
    </div>
  );
}

// Power law — y = c · x^-α, the Moonshot thesis
function PowerLawDivider() {
  // Plot y = 180 * x^(-0.7) on a 0–600 x range; invert y for SVG
  const W = 900, H = 220, pad = 20;
  const points = [];
  for (let i = 1; i <= 60; i++) {
    const x = i * 10;
    const y = 180 * Math.pow(x / 10, -0.7);
    const sx = pad + (x / 600) * (W - pad * 2);
    const sy = H - pad - Math.min(y, H - pad * 2);
    points.push([sx, sy]);
  }
  const path = 'M ' + points.map(p => p.map(n => n.toFixed(1)).join(' ')).join(' L ');

  return (
    <DividerFrame
      eyebrow="§ 01.3 · Distribution"
      equation="P(x) = c · x<sup style='font-size:0.7em'>−α</sup>"
      caption={"Power-law tail.\nMost ventures return zero.\nOne returns everything."}
    >
      <svg viewBox={`0 0 ${W} ${H}`} width="100%" height="100%" preserveAspectRatio="none" style={{ display: 'block', overflow: 'visible' }} data-plot="powerlaw">
        {/* Gridlines */}
        {[0, 0.25, 0.5, 0.75, 1].map(f => (
          <line key={'g' + f} x1={pad} x2={W - pad} y1={pad + f * (H - 2 * pad)} y2={pad + f * (H - 2 * pad)}
            stroke="var(--line)" strokeWidth="0.5" strokeDasharray="2 4" />
        ))}
        {/* X axis */}
        <line x1={pad} y1={H - pad} x2={W - pad} y2={H - pad} stroke="var(--dust-500)" strokeWidth="0.6" />
        {/* Y axis */}
        <line x1={pad} y1={pad} x2={pad} y2={H - pad} stroke="var(--dust-500)" strokeWidth="0.6" />
        {/* Tick labels */}
        <text x={pad + 2} y={pad + 8} className="diagram-label">y</text>
        <text x={W - pad - 4} y={H - pad - 6} className="diagram-label" textAnchor="end">x →</text>
        {/* Ticks along x */}
        {[0.2, 0.4, 0.6, 0.8].map(f => (
          <g key={'tx' + f}>
            <line x1={pad + f * (W - 2 * pad)} x2={pad + f * (W - 2 * pad)} y1={H - pad - 3} y2={H - pad + 3} stroke="var(--dust-500)" strokeWidth="0.6"/>
            <text x={pad + f * (W - 2 * pad)} y={H - pad + 14} className="diagram-label" textAnchor="middle">10{'^' + Math.round(f * 5)}</text>
          </g>
        ))}

        {/* The curve */}
        <path d={path} fill="none" stroke="var(--electric)" strokeWidth="1.6" />
        {/* Shaded tail under curve (tiny) */}
        <path d={`${path} L ${points[points.length-1][0]} ${H - pad} L ${points[0][0]} ${H - pad} Z`}
          fill="var(--electric)" fillOpacity="0.08" />

        {/* Callout: "fat tail" */}
        <g>
          <circle cx={points[2][0]} cy={points[2][1]} r="3.5" fill="none" stroke="var(--ember)" strokeWidth="1" />
          <line x1={points[2][0] + 4} y1={points[2][1] - 4} x2={points[2][0] + 80} y2={pad + 20} stroke="var(--ember)" strokeWidth="0.6" strokeDasharray="2 2" />
          <text x={points[2][0] + 84} y={pad + 22} className="diagram-label diagram-label--hot">head · rare outcomes</text>
        </g>
        {/* Callout: "long tail" */}
        <g>
          <circle cx={points[45][0]} cy={points[45][1]} r="3" fill="none" stroke="var(--electric)" strokeWidth="1" />
          <line x1={points[45][0]} y1={points[45][1] - 4} x2={points[45][0]} y2={pad + 40} stroke="var(--electric)" strokeWidth="0.6" strokeDasharray="2 2" />
          <text x={points[45][0] + 4} y={pad + 42} className="diagram-label diagram-label--accent">long tail · most ventures</text>
        </g>

        {/* Equation marker on curve */}
        <text x={points[10][0] + 10} y={points[10][1] - 12} className="diagram-label" style={{ fill: 'var(--dust-200)' }}>
          α ≈ 0.7
        </text>
      </svg>
    </DividerFrame>
  );
}

// Orbital / Hohmann transfer — launch diagram
function OrbitalDivider() {
  const W = 900, H = 220;
  const cx = W / 2, cy = H / 2;
  return (
    <DividerFrame
      eyebrow="§ 02.1 · Trajectory"
      equation="Δv = √(μ/r₁) · (√(2r₂/(r₁+r₂)) − 1)"
      caption={"Hohmann transfer.\nMinimum energy path\nbetween two orbits."}
      height={220}
    >
      <svg viewBox={`0 0 ${W} ${H}`} width="100%" height="100%" preserveAspectRatio="xMidYMid meet" style={{ display: 'block', overflow: 'visible' }}>
        {/* Inner orbit */}
        <circle cx={cx} cy={cy} r="48" fill="none" stroke="var(--dust-500)" strokeWidth="0.7" strokeDasharray="2 3" />
        {/* Outer orbit */}
        <circle cx={cx} cy={cy} r="92" fill="none" stroke="var(--dust-500)" strokeWidth="0.7" strokeDasharray="2 3" />
        {/* Central body (earth) */}
        <circle cx={cx} cy={cy} r="7" fill="var(--earth-deep)" />
        <circle cx={cx} cy={cy} r="7" fill="none" stroke="var(--earth)" strokeWidth="0.6" />
        <text x={cx} y={cy + 22} className="diagram-label" textAnchor="middle">Earth</text>

        {/* Transfer ellipse, semi-major = (48+92)/2 = 70, centered left by 22 */}
        <ellipse cx={cx - 22} cy={cy} rx="70" ry="58" fill="none" stroke="var(--electric)" strokeWidth="1.6" strokeDasharray="6 3" />

        {/* Departure point (on inner orbit, right side) */}
        <circle cx={cx + 48} cy={cy} r="3.5" fill="var(--electric)" />
        <text x={cx + 54} y={cy + 4} className="diagram-label diagram-label--accent">departure</text>

        {/* Arrival point (on outer orbit, left side) */}
        <circle cx={cx - 92} cy={cy} r="4" fill="none" stroke="var(--ember)" strokeWidth="1.4" />
        <circle cx={cx - 92} cy={cy} r="1.8" fill="var(--ember)" />
        <text x={cx - 88} y={cy - 8} className="diagram-label diagram-label--hot">target · Luna</text>

        {/* Velocity vector at departure */}
        <line x1={cx + 48} y1={cy} x2={cx + 48} y2={cy - 30} stroke="var(--electric)" strokeWidth="1.2" markerEnd="url(#arrow-e)" />
        <text x={cx + 52} y={cy - 22} className="diagram-label diagram-label--accent">v₁ + Δv</text>

        <defs>
          <marker id="arrow-e" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
            <path d="M 0 0 L 10 5 L 0 10 z" fill="var(--electric)" />
          </marker>
        </defs>

        {/* Radii labels */}
        <line x1={cx} y1={cy + 5} x2={cx + 48} y2={cy + 5} stroke="var(--dust-500)" strokeWidth="0.5" />
        <text x={cx + 24} y={cy + 16} className="diagram-label" textAnchor="middle">r₁</text>
        <line x1={cx} y1={cy - 5} x2={cx - 92} y2={cy - 5} stroke="var(--dust-500)" strokeWidth="0.5" />
        <text x={cx - 46} y={cy - 10} className="diagram-label" textAnchor="middle">r₂</text>

        {/* Grid crosshair */}
        <line x1={20} y1={cy} x2={W - 20} y2={cy} stroke="var(--line)" strokeWidth="0.4" strokeDasharray="1 4" />
      </svg>
    </DividerFrame>
  );
}

// Signal / transmission — a sine + noise diagram, leading into Relay
function SignalDivider() {
  const W = 900, H = 220, pad = 20;
  const pts = [];
  for (let i = 0; i <= 120; i++) {
    const x = pad + (i / 120) * (W - 2 * pad);
    const noise = (Math.sin(i * 0.7) + Math.sin(i * 1.37)) * 4;
    const y = H / 2 + Math.sin(i / 4) * 40 + noise * (1 - Math.min(1, i / 80));
    pts.push([x, y]);
  }
  const path = 'M ' + pts.map(p => p.map(n => n.toFixed(1)).join(' ')).join(' L ');

  return (
    <DividerFrame
      eyebrow="§ 03.0 · Relay"
      equation="s(t) = A · sin(2πft + φ) + n(t)"
      caption={"Carrier + noise.\nWe read both."}
    >
      <svg viewBox={`0 0 ${W} ${H}`} width="100%" height="100%" preserveAspectRatio="none" style={{ display: 'block', overflow: 'visible' }}>
        {/* Baseline */}
        <line x1={pad} y1={H / 2} x2={W - pad} y2={H / 2} stroke="var(--dust-500)" strokeWidth="0.6" strokeDasharray="2 4" />
        {/* Envelope */}
        <line x1={pad} y1={H / 2 - 44} x2={W - pad} y2={H / 2 - 44} stroke="var(--line)" strokeWidth="0.4" strokeDasharray="1 3" />
        <line x1={pad} y1={H / 2 + 44} x2={W - pad} y2={H / 2 + 44} stroke="var(--line)" strokeWidth="0.4" strokeDasharray="1 3" />
        {/* Signal */}
        <path d={path} fill="none" stroke="var(--electric)" strokeWidth="1.4" />

        {/* Tick marks along baseline */}
        {Array.from({ length: 12 }).map((_, i) => {
          const x = pad + (i / 11) * (W - 2 * pad);
          return <line key={i} x1={x} x2={x} y1={H / 2 - 3} y2={H / 2 + 3} stroke="var(--dust-500)" strokeWidth="0.5" />;
        })}

        {/* Labels */}
        <text x={pad} y={pad + 4} className="diagram-label">amp</text>
        <text x={W - pad} y={H - 4} className="diagram-label" textAnchor="end">t →</text>

        {/* Peak callout */}
        <circle cx={pts[30][0]} cy={pts[30][1]} r="3" fill="none" stroke="var(--ember)" strokeWidth="1" />
        <line x1={pts[30][0] + 4} y1={pts[30][1] - 4} x2={pts[30][0] + 40} y2={pad + 14} stroke="var(--ember)" strokeWidth="0.5" strokeDasharray="2 2" />
        <text x={pts[30][0] + 44} y={pad + 16} className="diagram-label diagram-label--hot">signal lock</text>

        {/* Frequency marker */}
        <text x={W - pad - 4} y={pad + 14} className="diagram-label diagram-label--accent" textAnchor="end">f = 2.295 GHz · S-band</text>
      </svg>
    </DividerFrame>
  );
}

Object.assign(window, { DividerFrame, PowerLawDivider, OrbitalDivider, SignalDivider });
