'use client' import { useState, useEffect } from 'react' import { useRouter } from 'next/navigation' interface Sale { id: number drop_id: number buyer_id: number size: number payment_id: string | null created_at: string drop_item?: string drop_unit?: string drop_ppu?: number buyer_username?: string buyer_email?: string buyer_fullname?: string buyer_address?: string buyer_phone?: string } export default function SalesManagementPage() { const router = useRouter() const [sales, setSales] = useState([]) const [loading, setLoading] = useState(true) const [authenticated, setAuthenticated] = useState(false) const [editingSale, setEditingSale] = useState(null) const [formData, setFormData] = useState({ drop_id: '', buyer_id: '', size: '', payment_id: '', }) useEffect(() => { // Check authentication fetch('/api/admin/check') .then((res) => res.json()) .then((data) => { if (data.authenticated) { setAuthenticated(true) fetchSales() } else { router.push('/admin/login') } }) .catch(() => { router.push('/admin/login') }) }, [router]) const fetchSales = async () => { try { const response = await fetch('/api/sales/list') if (response.ok) { const data = await response.json() setSales(Array.isArray(data) ? data : []) } } catch (error) { console.error('Error fetching sales:', error) } finally { setLoading(false) } } const handleEdit = (sale: Sale) => { setEditingSale(sale) setFormData({ drop_id: sale.drop_id.toString(), buyer_id: sale.buyer_id.toString(), size: sale.size.toString(), payment_id: sale.payment_id || '', }) } const handleSave = async () => { if (!editingSale) return try { const updateData: any = {} if (parseInt(formData.drop_id) !== editingSale.drop_id) { updateData.drop_id = parseInt(formData.drop_id) } if (parseInt(formData.buyer_id) !== editingSale.buyer_id) { updateData.buyer_id = parseInt(formData.buyer_id) } if (parseInt(formData.size) !== editingSale.size) { updateData.size = parseInt(formData.size) } if (formData.payment_id !== (editingSale.payment_id || '')) { updateData.payment_id = formData.payment_id || null } if (Object.keys(updateData).length === 0) { setEditingSale(null) return } const response = await fetch(`/api/sales/${editingSale.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(updateData), }) if (response.ok) { alert('Sale updated successfully') setEditingSale(null) fetchSales() } else { const error = await response.json() alert(`Error: ${error.error}`) } } catch (error) { console.error('Error updating sale:', error) alert('Failed to update sale') } } const handleDelete = async (id: number) => { if (!confirm('Are you sure you want to delete this sale?')) { return } try { const response = await fetch(`/api/sales/${id}`, { method: 'DELETE', }) if (response.ok) { alert('Sale deleted successfully') fetchSales() } else { const error = await response.json() alert(`Error: ${error.error}`) } } catch (error) { console.error('Error deleting sale:', error) alert('Failed to delete sale') } } if (loading) { return (

Loading...

) } if (!authenticated) { return null } return (

Sales Management

{sales.length === 0 ? (

No sales found

) : (
{sales.map((sale) => (
{editingSale?.id === sale.id ? (
setFormData({ ...formData, drop_id: e.target.value })} style={{ width: '100%', padding: '8px', borderRadius: '8px', border: '1px solid var(--border)', background: 'var(--bg-soft)', color: 'var(--text)' }} />
setFormData({ ...formData, buyer_id: e.target.value })} style={{ width: '100%', padding: '8px', borderRadius: '8px', border: '1px solid var(--border)', background: 'var(--bg-soft)', color: 'var(--text)' }} />
setFormData({ ...formData, size: e.target.value })} style={{ width: '100%', padding: '8px', borderRadius: '8px', border: '1px solid var(--border)', background: 'var(--bg-soft)', color: 'var(--text)' }} />
setFormData({ ...formData, payment_id: e.target.value })} style={{ width: '100%', padding: '8px', borderRadius: '8px', border: '1px solid var(--border)', background: 'var(--bg-soft)', color: 'var(--text)' }} />
) : (

Sale #{sale.id}

Drop: {sale.drop_item || `#${sale.drop_id}`} · Size: {sale.size}g

Buyer: {sale.buyer_username || `#${sale.buyer_id}`} ({sale.buyer_email || 'N/A'})

{(sale.buyer_fullname || sale.buyer_address || sale.buyer_phone) && (

Delivery Information:

{sale.buyer_fullname && (

Name: {sale.buyer_fullname}

)} {sale.buyer_address && (

Address: {sale.buyer_address}

)} {sale.buyer_phone && (

Phone: {sale.buyer_phone}

)}
)} {sale.drop_ppu && (

Price: {((sale.drop_ppu / 1000) * sale.size).toFixed(2)} CHF

)}

Created: {new Date(sale.created_at).toLocaleString()} {sale.payment_id && ` · Payment: ${sale.payment_id}`}

)}
))}
)}
) }