import { DEFAULT_DISCOUNT_RATE } from '../constants' // ============================================================================ // Wallet-specific Formatting Functions // ============================================================================ /** * Format Creem price with currency symbol (USD/EUR) */ export function formatCreemPrice( price: number, currency: 'USD' | 'EUR' ): string { const symbol = currency === 'EUR' ? '€' : '$' return `${symbol}${price.toFixed(2)}` } /** * Format large quota numbers with K/M suffix */ export function formatQuotaShort(quota: number): string { if (quota >= 1000000) { return `${(quota / 1000000).toFixed(1)}M` } if (quota >= 1000) { return `${(quota / 1000).toFixed(1)}K` } return quota.toString() } /** * Format currency amount that is already in local currency. * This is used for payment amounts that have been calculated via priceRatio. */ export function formatCurrency(amount: number | string): string { const numeric = typeof amount === 'number' ? amount : Number.parseFloat(String(amount)) if (!Number.isFinite(numeric)) return '-' return new Intl.NumberFormat(undefined, { minimumFractionDigits: 0, maximumFractionDigits: Math.abs(numeric) >= 1 ? 2 : 4, }).format(numeric) } /** * Get discount label for display (e.g., "20% OFF") */ export function getDiscountLabel(discount: number): string { if (discount >= DEFAULT_DISCOUNT_RATE) { return '' } const off = Math.round((1 - discount) * 100) return `${off}% OFF` } /** * Calculate pricing details for a preset amount */ export function calculatePresetPricing( presetValue: number, priceRatio: number, discount: number, usdExchangeRate: number = 1 ) { const originalPrice = presetValue * priceRatio const actualPrice = originalPrice * discount const savedAmount = originalPrice - actualPrice const hasDiscount = discount < 1.0 const displayValue = presetValue * usdExchangeRate return { displayValue, originalPrice, actualPrice, savedAmount, hasDiscount, } }