"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 } from "@/lib/api/settings"; import { useLanguage } from "@/contexts/LanguageContext"; import { ApiError } from "@/lib/api"; import { Save } from "lucide-react"; const SETTING_KEYS = ["default_booking_price"] as const; type SettingKey = typeof SETTING_KEYS[number]; interface SettingMeta { label: string; description: string; type: "number" | "text" } export default function AdminParametres() { const { t, locale } = useLanguage(); const [values, setValues] = useState>({ default_booking_price: "0" }); const [updatedAt, setUpdatedAt] = useState>({}); const [saving, setSaving] = useState(null); const [loading, setLoading] = useState(true); const SETTING_META: Record = { default_booking_price: { label: t("admin.settings.booking_price_label"), description: t("admin.settings.booking_price_desc"), type: "number", }, }; useEffect(() => { adminGetSettings() .then((rows) => { const vals: Record = { default_booking_price: "0" }; const dates: Record = {}; rows.forEach((r) => { vals[r.key] = r.value !== null && r.value !== undefined ? String(r.value) : ""; if (r.updated_at) dates[r.key] = r.updated_at; }); setValues(vals); setUpdatedAt(dates); }) .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 as SettingKey]; const raw = values[key] ?? ""; const value = meta?.type === "number" ? parseFloat(raw) || 0 : raw; const saved = await adminUpdateSetting(key, value); if (saved.updated_at) setUpdatedAt((prev) => ({ ...prev, [key]: saved.updated_at })); toast.success(t("admin.settings.saved")); } catch (err) { toast.error(err instanceof ApiError ? err.message : t("admin.error")); } finally { setSaving(null); } }; return (

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

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

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

{meta.description}

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

{t("admin.settings.last_updated")} {new Date(updatedAt[key]).toLocaleDateString(locale)}

)}
); })}
)}
); }