import type { ReactNode } from "react"; import { CatalogItemImage, type CatalogItemImageData } from "@/components/catalog-item-image"; import { Card, CardContent } from "@/components/ui/card"; import { rarityGradientClass, rarityTextClass } from "@/lib/catalog/rarity"; import { cn } from "@/lib/utils"; type DamageMetric = "overallPercent" | "personalPercent"; export function weaponComparisonPercent(value: string | null, exporting = false) { if (value === null) return null; return Number(value) === 0 ? exporting ? "-%" : "-" : `${Number(value).toLocaleString(undefined, { maximumFractionDigits: 2 })}%`; } export function WeaponComparisonCard({ weapon, rank, refinement, note, overallPercent, personalPercent, exporting = false, compactExportGrid = false, weaponHref, imageControl, refinementControl, noteControl, actions, renderMetric, }: { weapon: CatalogItemImageData & { name: string }; rank: number; refinement: string; note: string | null; overallPercent: string | null; personalPercent: string | null; exporting?: boolean; compactExportGrid?: boolean; weaponHref?: string; imageControl?: ReactNode; refinementControl?: ReactNode; noteControl?: ReactNode; actions?: ReactNode; renderMetric?: (metric: DamageMetric) => ReactNode; }) { const Panel = weaponHref ? "a" : "div"; const title =
{rank}. {weapon.name}{refinementControl ? null : ` R${refinement}`}
; return{note}
: null)}{renderMetric ? renderMetric(metric) : weaponComparisonPercent(value, exporting)}
{metric === "overallPercent" ? "ดาเมจทั้งทีม" : "ดาเมจส่วนตัว"}