'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
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}
)
})
)}
)
}