'use client'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Separator } from '@/components/ui/separator'; import { LOOT_DROPS, LOOT_RARITY_COLORS } from '@/lib/game/data/loot-drops'; import { canCraftRecipe } from '@/lib/game/data/fabricator-recipes'; import { MANA_TYPE_LABELS } from '@/lib/game/data/fabricator-recipe-types'; import type { FabricatorRecipe } from '@/lib/game/data/fabricator-recipes'; interface MaterialRecipeCardProps { recipe: FabricatorRecipe; materials: Record; rawMana: number; elementalMana: Record; onCraft: (recipe: FabricatorRecipe) => void; } export function MaterialRecipeCard({ recipe, materials, rawMana, elementalMana, onCraft, }: MaterialRecipeCardProps) { const pool = recipe.manaType === 'raw' ? rawMana : (elementalMana[recipe.manaType]?.current ?? 0); const { canCraft } = canCraftRecipe(recipe, materials, pool, recipe.manaType); const resultDrop = recipe.resultMaterial ? LOOT_DROPS[recipe.resultMaterial] : null; const resultRarity = resultDrop ? LOOT_RARITY_COLORS[resultDrop.rarity] : null; return (
{recipe.name}
{recipe.rarity}
{recipe.resultAmount}x Output
{recipe.description}
{Object.keys(recipe.materials).length > 0 && ( <>
Input Materials:
{Object.entries(recipe.materials).map(([matId, amount]) => { const available = materials[matId] || 0; const matDrop = LOOT_DROPS[matId]; const hasEnough = available >= amount; return (
{matDrop?.name ?? matId} {available} / {amount}
); })} )} {recipe.manaCost > 0 && (
{MANA_TYPE_LABELS[recipe.manaType]?.split(' ')[1] ?? recipe.manaType} Mana: = recipe.manaCost ? 'text-green-400' : 'text-red-400'}> {pool} / {recipe.manaCost}
)}
Produces: {recipe.resultAmount}x {resultDrop?.name ?? recipe.resultMaterial}
); }