"use client"; import { useState, useEffect } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { toast } from "sonner"; import { adminGetSettings, adminUpdateSetting, StoreSetting } from "@/lib/api/settings"; import { useLanguage } from "@/contexts/LanguageContext"; import { ApiError } from "@/lib/api"; import { Save } from "lucide-react"; export default function AdminParametres() { const { t, locale } = useLanguage(); const [settings, setSettings] = useState([]); const [values, setValues] = useState>({}); const [saving, setSaving] = useState(null); const [loading, setLoading] = useState(true); const SETTING_META: Record = { default_booking_price: { label: t("booking.free") === "Free" ? "Default booking price (€)" : t("booking.free") === "Kostenlos" ? "Standardpreis für Reservierungen (€)" : "Prix de réservation par défaut (€)", description: t("booking.free") === "Free" ? "Price applied to each appointment (0 = free)" : t("booking.free") === "Kostenlos" ? "Preis pro Termin (0 = kostenlos)" : "Prix appliqué à chaque rendez-vous (0 = gratuit)", type: "number", }, }; useEffect(() => { adminGetSettings() .then((rows) => { setSettings(rows); const init: Record = {}; rows.forEach((r) => { init[r.key] = r.value !== null && r.value !== undefined ? String(r.value) : ""; }); setValues(init); }) .catch((e) => toast.error(e instanceof ApiError ? e.message : t("admin.error"))) .finally(() => setLoading(false)); }, []); const handleSave = async (key: string) => { setSaving(key); try { const meta = SETTING_META[key]; const raw = values[key] ?? ""; const value = meta?.type === "number" ? parseFloat(raw) : raw; await adminUpdateSetting(key, value); toast.success(t("admin.settings.saved")); } catch (err) { toast.error(err instanceof ApiError ? err.message : t("admin.error")); } finally { setSaving(null); } }; const knownKeys = settings.filter((s) => SETTING_META[s.key]); const unknownKeys = settings.filter((s) => !SETTING_META[s.key]); return (

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

{t("admin.settings.subtitle")}

{loading ? (
{Array.from({ length: 3 }).map((_, i) => (
))}
) : ( <> {t("admin.settings.bookings")} {knownKeys.map((s) => { const meta = SETTING_META[s.key]; return (

{meta.description}

setValues((prev) => ({ ...prev, [s.key]: e.target.value }))} className="max-w-[200px]" />
{s.updated_at && (

{t("admin.settings.last_updated")} {new Date(s.updated_at).toLocaleDateString(locale)}

)}
); })} {knownKeys.length === 0 && (

{t("admin.settings.no_settings")}

)}
{unknownKeys.length > 0 && ( {t("admin.settings.other")} {unknownKeys.map((s) => (
setValues((prev) => ({ ...prev, [s.key]: e.target.value }))} />
))}
)} )}
); }