import { useEffect, useState } from "react"; import { api } from "../api"; import type { EngineSlip, PowSummary } from "../types"; import TakeItFakeIt from "./TakeItFakeIt"; import TicketCard, { LegLine, TYPE_META, american } from "./TicketCard"; import { useEngine } from "./useEngine"; const TYPE_ORDER = ["BPL_EDGE", "SPY_BOY"]; /** The week's featured long shot: ten of the likeliest legs, one per game. */ export function CrazyHorseHero({ slip }: { slip: EngineSlip }) { const half = Math.ceil(slip.legs.length / 2); const cols = [slip.legs.slice(0, half), slip.legs.slice(half)]; return (
FEATURED TICKET · WEEK {slip.week} CRAZY HORSE {slip.legs.length} high-probability legs · one per game · FanDuel prices
${slip.wager} pays ${slip.payout.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {american(slip.boostedAmericanOdds)} · {slip.hitProbability !== undefined ? `${(slip.hitProbability * 100).toFixed(1)}%` : "—"} to hit all {slip.legs.length}

{slip.insight}

{cols.map((c, i) =>
{c.map((l, j) => )}
)}
); } function PowLine({ pow }: { pow: PowSummary | null }) { if (!pow) return null; const target = Math.round(pow.target * 100); const graded = [...pow.weeks].reverse().find((w) => w.ticketsGraded > 0); const posted = pow.weeks[pow.weeks.length - 1]; const failed = graded?.failure ?? false; const color = !graded ? "var(--bp-muted)" : failed ? "#ef4444" : "#2ee6a6"; return ( {graded ? `POW wk ${graded.week}: ${graded.ticketsWon}/${graded.ticketsGraded} (${Math.round((graded.pow ?? 0) * 100)}%) · target ${target}%${failed ? " · FAILED" : ""}` : `POW: no graded week yet · target ${target}%`} {posted && posted !== graded ? ` · wk ${posted.week} board: ${posted.ticketsPosted} tickets posted` : ""} ); } export default function EngineTab({ showHorse = true }: { showHorse?: boolean }) { const { data, error } = useEngine(); const [filter, setFilter] = useState("ALL"); const [pow, setPow] = useState(null); useEffect(() => { api.pow().then(setPow).catch(() => setPow(null)); }, []); const slips = data?.slips ?? null; const visible = slips ? (filter === "ALL" ? slips : slips.filter((s) => s.correlationType === filter)) : []; return (
{showHorse && data?.crazyHorse && }
PROPPA ENGINE · EVERY TICKET PRICED Big Proppa Line vs FanDuel · player props, NFL games and college · one leg per game · every ticket defaults to FAKE IT in MY BOO
{["ALL", ...TYPE_ORDER].map((t) => { const meta = TYPE_META[t]; const active = filter === t; return ( ); })}
{error && !data &&
The engine is slow to answer or offline. Retrying automatically...
} {!error && !data &&
Scoring the slate...
} {slips && visible.length === 0 && (
No {filter !== "ALL" ? filter + " " : ""}tickets on this slate yet. Lines refresh every few minutes; the engine widens its bar automatically before it shows an empty board.
)} {visible.map((slip) => )}
); }