'use client' import { useState, useEffect } from 'react' import { useRouter } from 'next/navigation' interface Buyer { id: number username: string email: string created_at?: string } export default function BuyersManagementPage() { const router = useRouter() const [buyers, setBuyers] = useState([]) const [loading, setLoading] = useState(true) const [authenticated, setAuthenticated] = useState(false) const [editingBuyer, setEditingBuyer] = useState(null) const [formData, setFormData] = useState({ username: '', email: '', password: '', }) useEffect(() => { // Check authentication fetch('/api/admin/check') .then((res) => res.json()) .then((data) => { if (data.authenticated) { setAuthenticated(true) fetchBuyers() } else { router.push('/admin/login') } }) .catch(() => { router.push('/admin/login') }) }, [router]) const fetchBuyers = async () => { try { const response = await fetch('/api/buyers') if (response.ok) { const data = await response.json() setBuyers(Array.isArray(data) ? data : []) } } catch (error) { console.error('Error fetching buyers:', error) } finally { setLoading(false) } } const handleEdit = (buyer: Buyer) => { setEditingBuyer(buyer) setFormData({ username: buyer.username, email: buyer.email, password: '', }) } const handleSave = async () => { if (!editingBuyer) return try { const updateData: any = {} if (formData.username !== editingBuyer.username) { updateData.username = formData.username } if (formData.email !== editingBuyer.email) { updateData.email = formData.email } if (formData.password) { updateData.password = formData.password } if (Object.keys(updateData).length === 0) { setEditingBuyer(null) return } const response = await fetch(`/api/buyers/${editingBuyer.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(updateData), }) if (response.ok) { alert('Buyer updated successfully') setEditingBuyer(null) fetchBuyers() } else { const error = await response.json() alert(`Error: ${error.error}`) } } catch (error) { console.error('Error updating buyer:', error) alert('Failed to update buyer') } } const handleDelete = async (id: number) => { if (!confirm('Are you sure you want to delete this buyer? This will also delete all their sales.')) { return } try { const response = await fetch(`/api/buyers/${id}`, { method: 'DELETE', }) if (response.ok) { alert('Buyer deleted successfully') fetchBuyers() } else { const error = await response.json() alert(`Error: ${error.error}`) } } catch (error) { console.error('Error deleting buyer:', error) alert('Failed to delete buyer') } } if (loading) { return (

Loading...

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

Buyer Management

{buyers.length === 0 ? (

No buyers found

) : (
{buyers.map((buyer) => (
{editingBuyer?.id === buyer.id ? (
setFormData({ ...formData, username: e.target.value })} style={{ width: '100%', padding: '8px', borderRadius: '8px', border: '1px solid var(--border)', background: 'var(--bg-soft)', color: 'var(--text)' }} />
setFormData({ ...formData, email: e.target.value })} style={{ width: '100%', padding: '8px', borderRadius: '8px', border: '1px solid var(--border)', background: 'var(--bg-soft)', color: 'var(--text)' }} />
setFormData({ ...formData, password: e.target.value })} style={{ width: '100%', padding: '8px', borderRadius: '8px', border: '1px solid var(--border)', background: 'var(--bg-soft)', color: 'var(--text)' }} />
) : (

{buyer.username}

Email: {buyer.email}

ID: {buyer.id}

{buyer.created_at && (

Created: {new Date(buyer.created_at).toLocaleString()}

)}
)}
))}
)}
) }