/** * CreditAvailabilityWidget - Shows available operations based on credit balance * Calculates how many operations can be performed with remaining credits */ import { Link } from 'react-router-dom'; import { GroupIcon, BoltIcon, FileTextIcon, FileIcon, DollarLineIcon, } from '../../icons'; interface CreditAvailabilityWidgetProps { availableCredits: number; totalCredits: number; loading?: boolean; } // Average credit costs per operation const OPERATION_COSTS = { clustering: { label: 'Clustering Runs', cost: 10, icon: GroupIcon, color: 'text-purple-600 dark:text-purple-400' }, ideas: { label: 'Content Ideas', cost: 2, icon: BoltIcon, color: 'text-orange-600 dark:text-orange-400' }, content: { label: 'Articles', cost: 50, icon: FileTextIcon, color: 'text-green-600 dark:text-green-400' }, images: { label: 'Images', cost: 5, icon: FileIcon, color: 'text-pink-600 dark:text-pink-400' }, }; export default function CreditAvailabilityWidget({ availableCredits, totalCredits, loading = false }: CreditAvailabilityWidgetProps) { const usedCredits = totalCredits - availableCredits; const usagePercent = totalCredits > 0 ? Math.round((usedCredits / totalCredits) * 100) : 0; // Calculate available operations const availableOps = Object.entries(OPERATION_COSTS).map(([key, config]) => ({ type: key, label: config.label, icon: config.icon, color: config.color, cost: config.cost, available: Math.floor(availableCredits / config.cost), })); return (
{totalCredits > 0 ? `${usedCredits.toLocaleString()} of ${totalCredits.toLocaleString()} used (${usagePercent}%)` : 'No credits allocated'}
You can run:
{loading ? (Loading...
No credits available
Purchase credits to continue{op.label}
{op.cost} credits each
You're running low on credits. Consider purchasing more to avoid interruptions.