"use client"; import { useState, useEffect, useCallback } from "react"; import { Card } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Search, Ban, CheckCircle, RefreshCw } from "lucide-react"; import { toast } from "sonner"; import { adminListCustomers, adminBlockCustomer, CustomerApi } from "@/lib/api/customers"; import { useLanguage } from "@/contexts/LanguageContext"; import { ApiError } from "@/lib/api"; export default function AdminClients() { const { t, locale } = useLanguage(); const [customers, setCustomers] = useState([]); const [loading, setLoading] = useState(true); const [search, setSearch] = useState(""); const [query, setQuery] = useState(""); const [updating, setUpdating] = useState(null); const load = useCallback(async () => { setLoading(true); try { const res = await adminListCustomers(query || undefined); setCustomers(res.data); } catch (err) { toast.error(err instanceof ApiError ? err.message : t("admin.error")); } finally { setLoading(false); } }, [query]); useEffect(() => { load(); }, [load]); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); setQuery(search); }; const toggleBlock = async (c: CustomerApi) => { setUpdating(c.id); try { const updated = await adminBlockCustomer(c.id, !c.is_blocked); setCustomers((prev) => prev.map((x) => (x.id === c.id ? { ...x, is_blocked: updated.is_blocked } : x))); toast.success(updated.is_blocked ? t("admin.customers.blocked") : t("admin.customers.unblocked")); } catch (err) { toast.error(err instanceof ApiError ? err.message : t("admin.error")); } finally { setUpdating(null); } }; return (

{t("admin.customers.title")}

{customers.length} {t("admin.customers.subtitle")}

setSearch(e.target.value)} />
{loading ? (
{Array.from({ length: 5 }).map((_, i) => (
))}
) : ( {t("admin.customers.col_name")} {t("admin.customers.col_email")} {t("admin.customers.col_phone")} {t("admin.customers.col_orders")} {t("admin.customers.col_bookings")} {t("admin.customers.col_spent")} {t("admin.customers.col_joined")} {t("admin.status")} {customers.length === 0 ? ( {t("admin.customers.none")} ) : ( customers.map((c) => ( {c.full_name || "—"} {c.email} {c.phone ?? "—"} {c.orders_count} {c.bookings_count} {Number(c.total_spent).toFixed(2)} € {new Date(c.created_at).toLocaleDateString(locale, { day: "2-digit", month: "short", year: "numeric" })} {c.is_blocked ? ( {t("admin.status.blocked")} ) : ( {t("admin.status.active")} )} )) )}
)}
); }