'use client'; import { SKILLS_DEF } from '@/lib/game/constants'; import type { SkillUpgradeChoice } from '@/lib/game/types'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog'; export interface UpgradeDialogProps { open: boolean; skillId: string | null; milestone: 5 | 10; pendingSelections: string[]; available: SkillUpgradeChoice[]; alreadySelected: string[]; onToggle: (upgradeId: string) => void; onConfirm: () => void; onCancel: () => void; onOpenChange: (open: boolean) => void; } export function UpgradeDialog({ open, skillId, milestone, pendingSelections, available, alreadySelected, onToggle, onConfirm, onCancel, onOpenChange, }: UpgradeDialogProps) { if (!skillId) return null; const skillDef = SKILLS_DEF[skillId]; const currentSelections = pendingSelections.length > 0 ? pendingSelections : alreadySelected; return ( Choose Upgrade - {skillDef?.name || skillId} Level {milestone} Milestone - Select 2 upgrades ({currentSelections.length}/2 chosen)
{available.map((upgrade) => { const isSelected = currentSelections.includes(upgrade.id); const canToggle = currentSelections.length < 2 || isSelected; return (
{ if (canToggle) { onToggle(upgrade.id); } }} >
{upgrade.name}
{isSelected && Selected}
{upgrade.desc}
{upgrade.effect.type === 'multiplier' && (
+{Math.round((upgrade.effect.value! - 1) * 100)}% {upgrade.effect.stat}
)} {upgrade.effect.type === 'bonus' && (
+{upgrade.effect.value} {upgrade.effect.stat}
)} {upgrade.effect.type === 'special' && (
⚡ {upgrade.effect.specialDesc || 'Special effect'}
)}
); })}
); } UpgradeDialog.displayName = "UpgradeDialog";