"use client"; import { useState } from "react"; import { Trophy } from "lucide-react"; import { motion, AnimatePresence } from "framer-motion"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; type Trajectory = { label: string; strategy: string; rewards: number[]; rewardBreakdown: Array<{ name: string; a: number; b: number }>; tag: string; }; const trajectoryA: Trajectory = { label: "Trajectory A — Critic First", strategy: "Prioritizes highest-severity critique immediately. Faster hook lift but coherence occasionally suffers.", tag: "critic-first", rewards: [0.52, 0.61, 0.68, 0.72], rewardBreakdown: [ { name: "R1 Hook", a: 0.71, b: 0.65 }, { name: "R2 Coherence", a: 0.63, b: 0.74 }, { name: "R3 Cultural", a: 0.67, b: 0.82 }, { name: "R5 Preserve", a: 0.58, b: 0.79 }, { name: "R10 Retention", a: 0.66, b: 0.85 }, ], }; const trajectoryB: Trajectory = { label: "Trajectory B — Defender First", strategy: "Preserves voice and cultural anchors first, then applies narrower targeted edits for better retention.", tag: "defender-first", rewards: [0.51, 0.64, 0.73, 0.80], rewardBreakdown: trajectoryA.rewardBreakdown, }; const stepLabels = ["Step 1", "Step 2", "Step 3", "Final"]; const stepDescriptions = [ "Initial rewrite applied", "Cultural anchor check done", "CTA repositioned", "Final scoring complete", ]; export function ABBattle() { const [step, setStep] = useState(0); const aScore = trajectoryA.rewards[step]; const bScore = trajectoryB.rewards[step]; const leader = bScore >= aScore ? "B" : "A"; const done = step >= 3; return (
{/* Controls */}
{stepLabels[step]} — {stepDescriptions[step]}
{/* Progress bar */}
{stepLabels.map((label, i) => (

{label}

))}
{/* Battle cards */}
{/* A */} ⚔️ {trajectoryA.label} {leader === "A" && !done && ( Leading )}

{trajectoryA.strategy}

{aScore.toFixed(2)}
VS
{/* B */} 🛡️ {trajectoryB.label} {leader === "B" && !done && ( Leading )}

{trajectoryB.strategy}

{bScore.toFixed(2)}
{done && ( Winner — Trajectory B (+0.08 reward) )}
{/* Reward breakdown */} {done && ( Final Reward Breakdown {trajectoryA.rewardBreakdown.map((row) => (
{row.name} A: {(row.a * 100).toFixed(0)}%   B: {(row.b * 100).toFixed(0)}%
))}
)}
{done ? "✓ Trajectory B wins — Defender-first preserves cultural anchors and achieves better retention (+0.08 reward)" : `Current leader: Trajectory ${leader} (${Math.abs(bScore - aScore).toFixed(2)} margin)`}
); }