'use client'; import { fmt, fmtDec } from '@/lib/game/stores'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Droplet } from 'lucide-react'; import type { SkillUpgradeChoice } from '@/lib/game/types'; import { useSkillStore, usePrestigeStore } from '@/lib/game/stores'; interface ManaStatsSectionProps { maxMana: number; baseRegen: number; effectiveRegen: number; clickMana: number; meditationMultiplier: number; upgradeEffects: any; elemMax: number; selectedUpgrades: { skillId: string; upgrade: SkillUpgradeChoice }[]; } export function ManaStatsSection({ maxMana, baseRegen, effectiveRegen, clickMana, meditationMultiplier, upgradeEffects, elemMax, selectedUpgrades, }: ManaStatsSectionProps) { const skills = useSkillStore((s) => s.skills); const skillTiers = useSkillStore((s) => s.skillTiers); const prestigeUpgrades = usePrestigeStore((s) => s.prestigeUpgrades); const getTierMultiplier = (skillId: string) => { return 1; }; return ( Mana Stats
Base Max Mana: 100
Mana Well Bonus: {(() => { const mw = skillTiers?.manaWell || 1; const tieredSkillId = mw > 1 ? `manaWell_t${mw}` : 'manaWell'; const level = (skills || {})[tieredSkillId] || (skills || {}).manaWell || 0; const tierMult = getTierMultiplier(tieredSkillId); return `+${fmt(level * 100 * tierMult)} (${level} lvl × 100 × ${tierMult}x tier)`; })()}
Prestige Mana Well: +{fmt((prestigeUpgrades.manaWell || 0) * 500)}
{upgradeEffects.maxManaBonus > 0 && (
Upgrade Mana Bonus: +{fmt(upgradeEffects.maxManaBonus)}
)} {upgradeEffects.maxManaMultiplier > 1 && (
Upgrade Mana Multiplier: ×{fmtDec(upgradeEffects.maxManaMultiplier, 2)}
)}
Total Max Mana: {fmt(maxMana)}
Base Regen: 2/hr
Mana Flow Bonus: {(() => { const mf = skillTiers?.manaFlow || 1; const tieredSkillId = mf > 1 ? `manaFlow_t${mf}` : 'manaFlow'; const level = skills[tieredSkillId] || skills.manaFlow || 0; const tierMult = getTierMultiplier(tieredSkillId); return `+${fmtDec(level * 1 * tierMult, 2)}/hr (${level} lvl × 1 × ${tierMult}x tier)`; })()}
Mana Spring Bonus: +{(skills.manaSpring || 0) * 2}/hr
Prestige Mana Flow: +{fmtDec((prestigeUpgrades.manaFlow || 0) * 0.5)}/hr
Temporal Echo: ×{fmtDec(1 + (prestigeUpgrades.temporalEcho || 0) * 0.1, 2)}
Base Regen: {fmtDec(baseRegen, 2)}/hr
{upgradeEffects.regenBonus > 0 && (
Upgrade Regen Bonus: +{fmtDec(upgradeEffects.regenBonus, 2)}/hr
)} {upgradeEffects.permanentRegenBonus > 0 && (
Permanent Regen Bonus: +{fmtDec(upgradeEffects.permanentRegenBonus, 2)}/hr
)} {upgradeEffects.regenMultiplier > 1 && (
Upgrade Regen Multiplier: ×{fmtDec(upgradeEffects.regenMultiplier, 2)}
)}
Click Mana Value: +{clickMana}
Mana Tap Bonus: +{skills.manaTap || 0}
Mana Surge Bonus: +{(skills.manaSurge || 0) * 3}
Mana Overflow: ×{fmtDec(1 + (skills.manaOverflow || 0) * 0.25, 2)}
Meditation Multiplier: 1.5 ? 'text-[var(--mana-stellar)]' : 'text-[var(--text-secondary)]'}`}> {fmtDec(meditationMultiplier, 2)}x
Incursion Strength: {Math.round(upgradeEffects.incursionStrength * 100)}%
Effective Regen: {fmtDec(effectiveRegen, 2)}/hr
{/* Special Effects */} {(upgradeEffects.hasSteadyStream || upgradeEffects.hasManaTorrent || upgradeEffects.hasDesperateWells || upgradeEffects.manaCascadeBonus > 0 || upgradeEffects.manaWaterfallBonus > 0) && ( <>
Special Effects
{upgradeEffects.hasSteadyStream && (
Steady Stream: Immune to incursion
)} {upgradeEffects.manaCascadeBonus > 0 && (
Mana Cascade: +{fmtDec(upgradeEffects.manaCascadeBonus, 2)}/hr
)} {upgradeEffects.manaWaterfallBonus > 0 && (
Mana Waterfall: +{fmtDec(upgradeEffects.manaWaterfallBonus, 2)}/hr
)} {upgradeEffects.hasFlowSurge && (
Flow Surge: Clicks +100% regen for 1hr
)} {upgradeEffects.hasManaOverflow && (
Mana Overflow: Raw can exceed max by 20%
)} {upgradeEffects.hasEternalFlow && (
Eternal Flow: Regen immune to ALL penalties
)} {upgradeEffects.hasManaTorrent && upgradeEffects.rawMana > maxMana * 0.75 && (
Mana Torrent: +50% regen (high mana)
)} {upgradeEffects.hasDesperateWells && upgradeEffects.rawMana < maxMana * 0.25 && (
Desperate Wells: +50% regen (low mana)
)}
)} {/* Element Max */}
Element Capacity: {elemMax}
); }