import { cn } from "@/lib/utils"; import { Check, Minus, X, Circle } from "lucide-react"; type ProblemStatus = "solved" | "partial" | "attempted" | "not_attempted"; interface ProblemStatusBadgeProps { status: ProblemStatus; score?: number; maxScore?: number; className?: string; } const statusConfig: Record< ProblemStatus, { icon: typeof Check; className: string; bgClassName: string; } > = { solved: { icon: Check, className: "text-success", bgClassName: "bg-success/10", }, partial: { icon: Minus, className: "text-warning", bgClassName: "bg-warning/10", }, attempted: { icon: X, className: "text-destructive", bgClassName: "bg-destructive/10", }, not_attempted: { icon: Circle, className: "text-muted-foreground", bgClassName: "bg-muted", }, }; export function ProblemStatusBadge({ status, score, maxScore, className, }: ProblemStatusBadgeProps) { const config = statusConfig[status]; const Icon = config.icon; return (
{score !== undefined && maxScore !== undefined && status !== "not_attempted" && ( {score}/{maxScore} )}
); } // Helper to determine status from score export function getProblemStatus( score: number | undefined, maxScore: number, hasAttempted: boolean ): ProblemStatus { if (score === undefined || !hasAttempted) return "not_attempted"; if (score === maxScore) return "solved"; if (score > 0) return "partial"; return "attempted"; }