// FlowThumbnail.jsx — abstract left-to-right flow diagrams using ReelFlow
// brand colors. Variant 0–5 covers flows with 1, 2, 3, 4, 5, or 6 videos.
// Each variant draws a left→right reel of video nodes with branching button
// rows beneath that point to the next video or an external URL.
//
// Visual language:
//   - Yellow rounded rect = video node
//   - Smaller pastel rect = button (color cycles teal/peach/cream)
//   - Thin purple lines = connection (button → next video, or video → next)

const VIDEO_FILL = "#fcd456";
const VIDEO_FILL_ALT = "#fde590";
const BTN_TEAL = "#9ff7e4";
const BTN_PEACH = "#fdcfb1";
const BTN_CREAM = "#fff5cb";
const BTN_SKY = "#aef1fa";
const LINE = "#1f0a38";
const LINE_OPACITY = 0.18;

// Single-video flow with a few terminal buttons (URL destinations).
const Flow1 = () => (
  <svg viewBox="0 0 200 120" className="tb-flow-svg" xmlns="http://www.w3.org/2000/svg">
    <line x1="68" y1="48" x2="120" y2="28" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="68" y1="60" x2="120" y2="60" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="68" y1="72" x2="120" y2="92" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <rect x="20" y="42" width="48" height="36" rx="8" fill={VIDEO_FILL} />
    <rect x="120" y="20" width="60" height="18" rx="5" fill={BTN_TEAL} />
    <rect x="120" y="51" width="60" height="18" rx="5" fill={BTN_PEACH} />
    <rect x="120" y="82" width="60" height="18" rx="5" fill={BTN_CREAM} />
  </svg>
);

// Two-video flow: V1 → button → V2 → terminal buttons.
const Flow2 = () => (
  <svg viewBox="0 0 200 120" className="tb-flow-svg" xmlns="http://www.w3.org/2000/svg">
    <line x1="50" y1="60" x2="78" y2="46" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="50" y1="60" x2="78" y2="74" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="118" y1="46" x2="138" y2="46" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="138" y1="74" x2="118" y2="74" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="168" y1="50" x2="180" y2="38" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="168" y1="58" x2="180" y2="70" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <rect x="10" y="44" width="40" height="32" rx="7" fill={VIDEO_FILL} />
    <rect x="78" y="38" width="40" height="16" rx="4" fill={BTN_TEAL} />
    <rect x="78" y="66" width="40" height="16" rx="4" fill={BTN_PEACH} />
    <rect x="138" y="38" width="30" height="32" rx="6" fill={VIDEO_FILL_ALT} />
    <rect x="178" y="30" width="14" height="16" rx="3" fill={BTN_CREAM} />
    <rect x="178" y="62" width="14" height="16" rx="3" fill={BTN_SKY} />
  </svg>
);

// Three-video flow: V1 branches to V2 and V3, each with one terminal button.
const Flow3 = () => (
  <svg viewBox="0 0 200 120" className="tb-flow-svg" xmlns="http://www.w3.org/2000/svg">
    <line x1="42" y1="60" x2="68" y2="34" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="42" y1="60" x2="68" y2="86" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="98" y1="34" x2="116" y2="34" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="98" y1="86" x2="116" y2="86" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="146" y1="34" x2="166" y2="34" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="146" y1="86" x2="166" y2="86" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <rect x="6" y="44" width="36" height="32" rx="6" fill={VIDEO_FILL} />
    <rect x="68" y="26" width="30" height="16" rx="4" fill={BTN_TEAL} />
    <rect x="68" y="78" width="30" height="16" rx="4" fill={BTN_PEACH} />
    <rect x="116" y="20" width="30" height="28" rx="5" fill={VIDEO_FILL_ALT} />
    <rect x="116" y="72" width="30" height="28" rx="5" fill={VIDEO_FILL_ALT} />
    <rect x="166" y="26" width="28" height="16" rx="4" fill={BTN_CREAM} />
    <rect x="166" y="78" width="28" height="16" rx="4" fill={BTN_SKY} />
  </svg>
);

// Four-video flow: V1 fans out into V2/V3/V4, each leading to terminal buttons.
const Flow4 = () => (
  <svg viewBox="0 0 200 120" className="tb-flow-svg" xmlns="http://www.w3.org/2000/svg">
    <line x1="38" y1="60" x2="62" y2="22" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="38" y1="60" x2="62" y2="60" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="38" y1="60" x2="62" y2="98" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="86" y1="22" x2="106" y2="22" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="86" y1="60" x2="106" y2="60" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="86" y1="98" x2="106" y2="98" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="136" y1="22" x2="156" y2="22" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="136" y1="60" x2="156" y2="60" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="136" y1="98" x2="156" y2="98" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <rect x="6" y="44" width="32" height="32" rx="6" fill={VIDEO_FILL} />
    <rect x="62" y="14" width="24" height="16" rx="4" fill={BTN_TEAL} />
    <rect x="62" y="52" width="24" height="16" rx="4" fill={BTN_PEACH} />
    <rect x="62" y="90" width="24" height="16" rx="4" fill={BTN_CREAM} />
    <rect x="106" y="10" width="30" height="24" rx="5" fill={VIDEO_FILL_ALT} />
    <rect x="106" y="48" width="30" height="24" rx="5" fill={VIDEO_FILL_ALT} />
    <rect x="106" y="86" width="30" height="24" rx="5" fill={VIDEO_FILL_ALT} />
    <rect x="156" y="14" width="32" height="16" rx="4" fill={BTN_SKY} />
    <rect x="156" y="52" width="32" height="16" rx="4" fill={BTN_TEAL} />
    <rect x="156" y="90" width="32" height="16" rx="4" fill={BTN_PEACH} />
  </svg>
);

// Five-video flow: 3-column flow with denser branching.
const Flow5 = () => (
  <svg viewBox="0 0 200 120" className="tb-flow-svg" xmlns="http://www.w3.org/2000/svg">
    <line x1="34" y1="60" x2="58" y2="36" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="34" y1="60" x2="58" y2="84" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="80" y1="36" x2="100" y2="36" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="80" y1="84" x2="100" y2="84" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="124" y1="36" x2="142" y2="20" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="124" y1="36" x2="142" y2="52" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="124" y1="84" x2="142" y2="68" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="124" y1="84" x2="142" y2="100" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="166" y1="20" x2="184" y2="20" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="166" y1="100" x2="184" y2="100" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <rect x="6" y="44" width="28" height="32" rx="6" fill={VIDEO_FILL} />
    <rect x="58" y="28" width="22" height="16" rx="4" fill={BTN_TEAL} />
    <rect x="58" y="76" width="22" height="16" rx="4" fill={BTN_PEACH} />
    <rect x="100" y="22" width="24" height="28" rx="5" fill={VIDEO_FILL_ALT} />
    <rect x="100" y="70" width="24" height="28" rx="5" fill={VIDEO_FILL_ALT} />
    <rect x="142" y="12" width="24" height="16" rx="4" fill={BTN_CREAM} />
    <rect x="142" y="44" width="24" height="16" rx="4" fill={BTN_SKY} />
    <rect x="142" y="60" width="24" height="16" rx="4" fill={BTN_TEAL} />
    <rect x="142" y="92" width="24" height="16" rx="4" fill={BTN_PEACH} />
    <rect x="166" y="12" width="26" height="16" rx="4" fill={VIDEO_FILL_ALT} />
    <rect x="166" y="92" width="26" height="16" rx="4" fill={VIDEO_FILL_ALT} />
  </svg>
);

// Six-video flow: full-bleed multi-layer flow with the most branching.
const Flow6 = () => (
  <svg viewBox="0 0 200 120" className="tb-flow-svg" xmlns="http://www.w3.org/2000/svg">
    <line x1="32" y1="60" x2="52" y2="22" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="32" y1="60" x2="52" y2="60" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="32" y1="60" x2="52" y2="98" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="74" y1="22" x2="92" y2="22" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="74" y1="60" x2="92" y2="60" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="74" y1="98" x2="92" y2="98" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="118" y1="22" x2="138" y2="22" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="118" y1="60" x2="138" y2="42" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="118" y1="60" x2="138" y2="78" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="118" y1="98" x2="138" y2="98" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="160" y1="22" x2="180" y2="22" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="160" y1="42" x2="180" y2="42" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="160" y1="78" x2="180" y2="78" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <line x1="160" y1="98" x2="180" y2="98" stroke={LINE} strokeOpacity={LINE_OPACITY} strokeWidth="1.5" />
    <rect x="6" y="44" width="26" height="32" rx="6" fill={VIDEO_FILL} />
    <rect x="52" y="14" width="22" height="16" rx="4" fill={BTN_TEAL} />
    <rect x="52" y="52" width="22" height="16" rx="4" fill={BTN_PEACH} />
    <rect x="52" y="90" width="22" height="16" rx="4" fill={BTN_CREAM} />
    <rect x="92" y="10" width="26" height="24" rx="5" fill={VIDEO_FILL_ALT} />
    <rect x="92" y="48" width="26" height="24" rx="5" fill={VIDEO_FILL_ALT} />
    <rect x="92" y="86" width="26" height="24" rx="5" fill={VIDEO_FILL_ALT} />
    <rect x="138" y="14" width="22" height="16" rx="4" fill={BTN_SKY} />
    <rect x="138" y="34" width="22" height="16" rx="4" fill={BTN_TEAL} />
    <rect x="138" y="70" width="22" height="16" rx="4" fill={BTN_PEACH} />
    <rect x="138" y="90" width="22" height="16" rx="4" fill={BTN_CREAM} />
    <rect x="180" y="14" width="14" height="16" rx="3" fill={VIDEO_FILL_ALT} />
    <rect x="180" y="34" width="14" height="16" rx="3" fill={VIDEO_FILL_ALT} />
    <rect x="180" y="70" width="14" height="16" rx="3" fill={VIDEO_FILL_ALT} />
    <rect x="180" y="90" width="14" height="16" rx="3" fill={VIDEO_FILL_ALT} />
  </svg>
);

const flowVariants = { 0: Flow1, 1: Flow2, 2: Flow3, 3: Flow4, 4: Flow5, 5: Flow6 };

// `variant` is now expected to be (videoCount - 1), clamped to 0..5.
// Falls back gracefully if a raw index sneaks in.
function FlowThumbnail({ variant = 0 }) {
  const safe = Math.max(0, Math.min(5, variant | 0));
  const V = flowVariants[safe];
  return <V />;
}

window.FlowThumbnail = FlowThumbnail;
