import { BillingSummaryPanel } from '@/components/sponsors/BillingSummaryPanel'; import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader'; import { PayoutItem, SponsorPayoutQueueTable } from '@/components/sponsors/SponsorPayoutQueueTable'; import { ViewData } from '@/lib/contracts/view-data/ViewData'; import { siteConfig } from '@/lib/siteConfig'; import type { InvoiceDTO, PaymentMethodDTO } from '@/lib/types/tbd/SponsorBillingDTO'; import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Container } from '@/ui/Container'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { InfoBanner } from '@/ui/InfoBanner'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { Building2, CreditCard, Download, ExternalLink, LucideIcon, Percent, Receipt } from 'lucide-react'; export interface SponsorBillingViewData extends ViewData { stats: { totalSpent: number; pendingAmount: number; nextPaymentDate: string; nextPaymentAmount: number; averageMonthlySpend: number; }; paymentMethods: PaymentMethodDTO[]; invoices: InvoiceDTO[]; } interface SponsorBillingTemplateProps { viewData: SponsorBillingViewData; billingStats: Array<{ label: string; value: string; subValue?: string; icon: LucideIcon; variant: 'success' | 'warning' | 'info' | 'default'; }>; transactions: Array<{ id: string; date: string; amount: number | string; status: string; recipient?: string; description?: string; invoiceNumber?: string; }>; onSetDefaultPaymentMethod: (id: string) => void; onDownloadInvoice: (id: string) => void; } export function SponsorBillingTemplate({ viewData, billingStats, transactions, onSetDefaultPaymentMethod, onDownloadInvoice }: SponsorBillingTemplateProps) { // Map transactions to PayoutItems for the new table const payoutItems: PayoutItem[] = transactions.map(t => ({ id: t.id, date: t.date, amount: typeof t.amount === 'number' ? t.amount.toFixed(2) : t.amount, status: t.status === 'paid' ? 'completed' : t.status === 'pending' ? 'pending' : 'failed', recipient: t.recipient || 'GridPilot Platform', description: t.description || `Invoice ${t.invoiceNumber}` })); return ( console.log('Refresh')} /> {/* Billing History */} Billing History {/* Platform Fees & VAT */} Platform Fee {siteConfig.fees.platformFeePercent}% {siteConfig.fees.description} VAT Information {siteConfig.vat.notice} Standard Rate {siteConfig.vat.standardRate}% B2B Reverse Charge Available {/* Payment Methods */} Payment Methods {viewData.paymentMethods.map((method: PaymentMethodDTO) => ( {method.brand || 'Bank Account'} •••• {method.last4} {method.isDefault && ( Default )} {!method.isDefault && ( )} ))} All payments are securely processed by our payment provider. {/* Support */} Billing Support Need help with an invoice or have questions about your plan? ); }