'use client' import { useEffect, useState } from 'react' import { api } from '@/lib/api' import { DollarSign, TrendingUp, Users, Crown, Zap, RefreshCw, Loader2, ArrowUpRight, ArrowDownRight, Coins, } from 'lucide-react' import clsx from 'clsx' interface EarningsData { mrr: number arr: number paying_customers: number tier_breakdown: { scout: { count: number; revenue: number } trader: { count: number; revenue: number } tycoon: { count: number; revenue: number } } new_subscriptions: { week: number; month: number } churn: { month: number } yield_revenue_month: number total_revenue_month: number timestamp: string } export function EarningsTab() { const [data, setData] = useState(null) const [loading, setLoading] = useState(true) const [refreshing, setRefreshing] = useState(false) const loadData = async () => { try { const earnings = await api.getAdminEarnings() setData(earnings) } catch (err) { console.error('Failed to load earnings:', err) } finally { setLoading(false) setRefreshing(false) } } useEffect(() => { loadData() }, []) const handleRefresh = () => { setRefreshing(true) loadData() } if (loading) { return (
) } if (!data) { return (

Failed to load earnings data

) } return (
{/* Header Actions */}

Revenue Dashboard

Last updated: {new Date(data.timestamp).toLocaleString()}

{/* Main Revenue Cards */}
{/* MRR */}
Monthly Recurring
${data.mrr.toLocaleString()}
MRR
{/* ARR */}
Annual Recurring
${data.arr.toLocaleString()}
ARR
{/* Paying Customers */}
Paying Customers
{data.paying_customers}
+{data.new_subscriptions.week} this week
{/* Yield Revenue */}
Yield Revenue
${data.yield_revenue_month.toFixed(0)}
This month (30%)
{/* Tier Breakdown */}

Subscription Breakdown

{/* Tycoon */}

Tycoon

$29/month

{data.tier_breakdown.tycoon.count}

${data.tier_breakdown.tycoon.revenue}/mo

{/* Trader */}

Trader

$9/month

{data.tier_breakdown.trader.count}

${data.tier_breakdown.trader.revenue}/mo

{/* Scout */}

Scout

Free

{data.tier_breakdown.scout.count}

$0/mo

{/* Growth & Churn */}
{/* New This Week */}
New This Week

{data.new_subscriptions.week}

paid subscriptions

{/* New This Month */}
New This Month

{data.new_subscriptions.month}

paid subscriptions

{/* Churn */}
Churned This Month

{data.churn.month}

cancelled

{/* Total Revenue Summary */}

Total Monthly Revenue

Subscriptions + Yield (30%)

${data.total_revenue_month.toLocaleString()}

${(data.total_revenue_month * 12).toLocaleString()} projected ARR

) }