import { useState, useEffect } from 'react'; import { Download, Eye, Loader2 } from 'lucide-react'; import api from '../api/api'; import { downloadInvoiceAsPDF, downloadInvoiceAsJSON } from '../utils/invoiceGenerator'; const InvoiceView = ({ invoiceId, photographer, customer }) => { const [invoice, setInvoice] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { fetchInvoice(); }, [invoiceId]); const fetchInvoice = async () => { try { const res = await api.get(`/invoices/${invoiceId}`); setInvoice(res.data); } catch (err) { console.error('Failed to load invoice:', err); } finally { setLoading(false); } }; if (loading) { return (
); } if (!invoice) { return
Invoice not found
; } const statusColor = { pending: 'amber', paid: 'green', overdue: 'red', }; const color = statusColor[invoice.paymentStatus]; return (
{/* Header */}

Invoice

{invoice.invoiceNumber}

{invoice.paymentStatus}

Issue Date

{new Date(invoice.issueDate).toLocaleDateString()}

Due Date

{new Date(invoice.dueDate).toLocaleDateString()}

From

{photographer?.firstName} {photographer?.lastName}

To

{customer?.firstName} {customer?.lastName}

{/* Items Table */}
{invoice.items?.map((item, idx) => ( ))}
Description Quantity Unit Price Total
{item.description} {item.quantity} ₹{item.unitPrice.toFixed(2)} ₹{item.total.toFixed(2)}
{/* Totals */}
Subtotal ₹{invoice.subtotal.toFixed(2)}
Tax ({invoice.taxRate}%) ₹{invoice.tax.toFixed(2)}
{invoice.discount > 0 && (
Discount -₹{invoice.discount.toFixed(2)}
)}
Total Amount ₹{invoice.totalAmount.toFixed(2)}
{/* Action Buttons */}
); }; export default InvoiceView;