import { cn } from "~/lib/utils"; import { DEFAULT_SCORING_RULES, type ScoringRules } from "~/lib/scoring-types"; export const OMNIFANTASY_SCORING: ScoringRules = { pointsFor1st: 80, pointsFor2nd: 50, pointsFor3rd: 30, pointsFor4th: 30, pointsFor5th: 20, pointsFor6th: 20, pointsFor7th: 20, pointsFor8th: 20, }; export const PLACEMENT_LABELS = [ { key: "pointsFor1st" as const, label: "1st", color: "text-yellow-500" }, { key: "pointsFor2nd" as const, label: "2nd", color: "text-slate-400" }, { key: "pointsFor3rd" as const, label: "3rd", color: "text-orange-400" }, { key: "pointsFor4th" as const, label: "4th", color: "text-sky-400" }, { key: "pointsFor5th" as const, label: "5th", color: "text-green-500" }, { key: "pointsFor6th" as const, label: "6th", color: "text-green-500" }, { key: "pointsFor7th" as const, label: "7th", color: "text-emerald-400" }, { key: "pointsFor8th" as const, label: "8th", color: "text-emerald-400" }, ]; export interface ScoringPresetPickerProps { preset: "brackt" | "omnifantasy" | "custom"; onPresetChange: (v: "brackt" | "omnifantasy" | "custom") => void; rules: ScoringRules; onRulesChange: (r: ScoringRules) => void; disabled?: boolean; } export function ScoringPresetPicker({ preset, onPresetChange, rules, onRulesChange, disabled, }: ScoringPresetPickerProps) { const maxPoints = Math.max(...Object.values(rules)); function applyPreset(p: "brackt" | "omnifantasy") { onPresetChange(p); onRulesChange(p === "brackt" ? { ...DEFAULT_SCORING_RULES } : { ...OMNIFANTASY_SCORING }); } function handleFieldChange(key: keyof ScoringRules, raw: string) { const val = parseInt(raw, 10); if (!isNaN(val) && val >= 0 && val <= 1000) { onPresetChange("custom"); onRulesChange({ ...rules, [key]: val }); } } return (
{/* Preset tabs */}
{(["brackt", "omnifantasy", "custom"] as const).map((p) => ( ))}
{/* Placement fields */}
{PLACEMENT_LABELS.map(({ key, label, color }) => { const val = rules[key]; const barWidth = maxPoints > 0 ? (val / maxPoints) * 100 : 0; return (
{label}
handleFieldChange(key, e.target.value)} min={0} max={1000} className="w-14 h-8 text-center text-sm font-semibold border border-input rounded-md bg-background focus:outline-none focus:ring-2 focus:ring-ring [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none disabled:opacity-50" />
); })}
); }