// world/_fixture.js (Lane A) — DEV FIXTURES, not shipping content.
// Lane C owns real levels (js/levels/*.json). FIXTURE survives C's levels landing because the
// spline selfcheck (a qa gate) asserts against its exact shape — headless, no three.js, no
// levels registry. Do not edit FIXTURE's segments without re-reading spline.js --selfcheck.

export const FIXTURE = {
  id: 'A_FIXTURE',
  name: 'Lane A fixture canal',
  seed: 20260716,
  segments: [
    { biome: 'esophagus', length: 300, radius: { base: 10, wobble: 0.25 }, curviness: 0.55, flow: 14 },
    { biome: 'esophagus', length: 240, radius: { base: 12, wobble: 0.35 }, curviness: 0.95, flow: 11 },
    { biome: 'stomach',   length: 120, radius: { base: 16, wobble: 0.30 }, curviness: 0.20, flow: 4 },
  ],
  arenas: [{ at: 620, radius: 55, biome: 'stomach' }],
  events: [],
};

// The swept-room prototype (?lvl=swept in the harness) — Lane A's round-2 proposal to Lane C
// made flyable, so the shape argument is settled by looking instead of by reading.
//
// This is NOT L3 and does not touch it: C owns levels. It is the same anatomy (cardia ->
// fundus -> body/acid sea -> antrum -> pylorus) authored the way the proposal says a room
// should be authored — as the canal at room radii, `mode: "open"` where the disc clamp comes
// off — so C can fly it, hate it, and say why.
//
// Two numbers C should argue with:
//  - **radius 70 for the sea**, not L3's arena radius 180. 180 units = a 36cm-wide stomach,
//    which is 2.4x life size even by L3's own "1 unit : 1 mm" note; 70 gives ~14cm, which is
//    a real full stomach and still a cathedral next to a ~2u ship. If the sea must be 180,
//    say so and I'll measure that instead — it is one number.
//  - **wave.amp 4.0 in the sea** (schema v2, ruling #8). The biome default 0.7 is sized for a
//    radius-10 pipe and is literally invisible on a radius-70 wall. A room this size needs its
//    churn authored, which is the per-segment override earning its keep.
export const SWEPT_STOMACH = {
  id: 'A_SWEPT_STOMACH',
  name: 'Lane A swept-room prototype (stomach)',
  seed: 20260716,
  segments: [
    { biome: 'esophagus', name: 'Cardia', length: 200, radius: { base: 12, wobble: 0.2 },
      curviness: 0.3, flow: 8 },
    // The flare. A segment join blends radius over ~±25u (round 2), so 12 -> 70 across one
    // join would be a 58u climb in 50u of s: a funnel, not an anatomy. Give the flare its own
    // short segment and it reads as the fundus opening out.
    { biome: 'stomach', name: 'Fundus flare', length: 220, radius: { base: 38, wobble: 0.22 },
      curviness: 0.25, flow: 4, mode: 'open', wave: { amp: 2.2 } },
    { biome: 'stomach', name: 'Body (the acid sea)', length: 700, radius: { base: 70, wobble: 0.3 },
      curviness: 0.45, flow: 3, mode: 'open', wave: { amp: 4.0 } },
    { biome: 'stomach', name: 'Antrum', length: 380, radius: { base: 26, wobble: 0.25 },
      curviness: 0.35, flow: 6, mode: 'open', wave: { amp: 1.4 } },
    { biome: 'stomach', name: 'Pylorus', length: 160, radius: { base: 13, wobble: 0.15 },
      curviness: 0.2, flow: 10 },
  ],
  // The fundus dome stays an authored icosphere: it is a dead-end bulge OFF the centreline,
  // which a sweep cannot express. Both kinds of room in one level, on purpose — that's the
  // proposal's actual claim, not "spheres are bad".
  arenas: [{ at: 300, radius: 46, biome: 'stomach' }],
  acid: { from: 420, to: 1120, height: -18, biome: 'stomach' },
  events: [],
};

// The tint contact sheet (?lvl=biomes in the harness): one straight-ish segment per registry
// biome, in registry order, generous radius so the wall — not the curve — is what you judge.
// Exists for the eyeball law: every biome tint gets re-checked against D's current pack in one
// fly-through whenever either side changes (tints, textures, colorspace, TBN…).
export const SIX_BIOMES = {
  id: 'A_SIX_BIOMES',
  name: 'Lane A biome contact sheet',
  seed: 20260716,
  segments: ['oral', 'esophagus', 'stomach', 'small_intestine', 'large_intestine', 'appendix']
    .map((biome) => ({ biome, length: 200, radius: { base: 10, wobble: 0.2 }, curviness: 0.25, flow: 8 })),
  arenas: [],
  events: [],
};
