'use client'; import { useState } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { useGameContext } from '../GameContext'; import { SKILLS_DEF } from '@/lib/game/constants'; interface UpgradeDialogProps { skillId: string | null; milestone: 5 | 10; onClose: () => void; } export function UpgradeDialog({ skillId, milestone, onClose }: UpgradeDialogProps) { const { store } = useGameContext(); const skillDef = skillId ? SKILLS_DEF[skillId] : null; const { available, selected: alreadySelected } = skillId ? store.getSkillUpgradeChoices(skillId, milestone) : { available: [], selected: [] }; // Use local state for selections within this dialog session const [pendingSelections, setPendingSelections] = useState(() => [...alreadySelected]); const toggleUpgrade = (upgradeId: string) => { setPendingSelections((prev) => { if (prev.includes(upgradeId)) { return prev.filter((id) => id !== upgradeId); } else if (prev.length < 2) { return [...prev, upgradeId]; } return prev; }); }; const handleDone = () => { if (pendingSelections.length === 2 && skillId) { store.commitSkillUpgrades(skillId, pendingSelections); } onClose(); }; const handleOpenChange = (open: boolean) => { if (!open) { setPendingSelections([...alreadySelected]); onClose(); } }; // Don't render if no skill selected if (!skillId) return null; return ( Choose Upgrade - {skillDef?.name || skillId} Level {milestone} Milestone - Select 2 upgrades ({pendingSelections.length}/2 chosen)
{available.map((upgrade) => { const isSelected = pendingSelections.includes(upgrade.id); const canToggle = pendingSelections.length < 2 || isSelected; return (
{ if (canToggle) { toggleUpgrade(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.desc || 'Special effect'}
)}
); })}
); }