'use client' import { useState } from 'react' import { useSettings } from '@/hooks/useSettings' import { Button } from '@/components/ui/button' import { formatNumber } from '@/lib/utils/formatNumber' import { History } from 'lucide-react' import EmptyState from './EmptyState' import { Input } from '@/components/ui/input' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { toast } from '@/hooks/use-toast' import { useCoins } from '@/hooks/useCoins' import { format } from 'date-fns' import Link from 'next/link' export default function CoinsManager() { const { balance, transactions, addAmount, removeAmount } = useCoins() const { settings } = useSettings() const DEFAULT_AMOUNT = '0' const [amount, setAmount] = useState(DEFAULT_AMOUNT) const handleAddCoins = async () => { const data = await addAmount(Number(amount), "Manual addition") if (data) { setAmount(DEFAULT_AMOUNT) toast({ title: "Success", description: `Added ${amount} coins` }) } } const handleRemoveCoins = async () => { const data = await removeAmount(Math.abs(Number(amount)), "Manual removal") if (data) { setAmount(DEFAULT_AMOUNT) toast({ title: "Success", description: `Removed ${amount} coins` }) } } return (

Coins Management

🪙
Current Balance
{formatNumber({ amount: balance, settings })} coins
setAmount(e.target.value)} className="text-center text-xl font-medium h-12" />
🪙
Statistics
Total Earned
{formatNumber({ amount: transactions .filter(t => { if (t.type === 'HABIT_COMPLETION' && t.relatedItemId) { return !transactions.some(undoT => undoT.type === 'HABIT_UNDO' && undoT.relatedItemId === t.relatedItemId ) } return t.amount > 0 && t.type !== 'HABIT_UNDO' }) .reduce((sum, t) => sum + t.amount, 0) , settings })} 🪙
Total Spent
{formatNumber({ amount: Math.abs( transactions .filter(t => t.type === 'WISH_REDEMPTION' || t.type === 'MANUAL_ADJUSTMENT') .reduce((sum, t) => sum + (t.amount < 0 ? t.amount : 0), 0) ), settings })} 🪙
Today's Transactions
{transactions.filter(t => new Date(t.timestamp).toDateString() === new Date().toDateString() ).length} 📊
Transaction History Total: {transactions.length} transactions
{transactions.length === 0 ? ( ) : ( transactions.map((transaction) => { const getBadgeStyles = () => { switch (transaction.type) { case 'HABIT_COMPLETION': return 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100' case 'HABIT_UNDO': return 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100' case 'WISH_REDEMPTION': return 'bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-100' case 'MANUAL_ADJUSTMENT': return 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-100' default: return 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-100' } } return (
{transaction.relatedItemId ? ( {transaction.description} ) : (

{transaction.description}

)} {transaction.type.split('_').join(' ')}

{format(new Date(transaction.timestamp), 'PPpp')}

= 0 ? 'text-green-600 dark:text-green-400' : 'text-red-600 dark:text-red-400' }`} > {transaction.amount >= 0 ? '+' : ''}{transaction.amount}
) }) )}
) }