"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { ArrowLeft, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Label } from "@/components/ui/label"; import { Switch } from "@/components/ui/switch"; import { Card, CardContent } from "@/components/ui/card"; import { toast } from "sonner"; import { slugify } from "@/lib/utils"; interface GuideFormProps { initialData?: { id?: string; title: string; titleEn: string; subtitle: string; subtitleEn: string; content: string; contentEn: string; category: string; iconName: string; iconColor: string; bgColor: string; published: boolean; order: number; }; mode: "create" | "edit"; } export default function GuideForm({ initialData, mode }: GuideFormProps) { const router = useRouter(); const [loading, setLoading] = useState(false); const [title, setTitle] = useState(initialData?.title ?? ""); const [titleEn, setTitleEn] = useState(initialData?.titleEn ?? ""); const [subtitle, setSubtitle] = useState(initialData?.subtitle ?? ""); const [subtitleEn, setSubtitleEn] = useState(initialData?.subtitleEn ?? ""); const [content, setContent] = useState(initialData?.content ?? ""); const [contentEn, setContentEn] = useState(initialData?.contentEn ?? ""); const [category, setCategory] = useState(initialData?.category ?? "general"); const [iconName, setIconName] = useState(initialData?.iconName ?? "book"); const [iconColor, setIconColor] = useState(initialData?.iconColor ?? "#185FA5"); const [bgColor, setBgColor] = useState(initialData?.bgColor ?? "#E6F1FB"); const [published, setPublished] = useState(initialData?.published ?? true); const [order, setOrder] = useState(initialData?.order ?? 0); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (loading) return; if (!title.trim() || !subtitle.trim() || !content.trim()) { toast.error("Veuillez remplir les champs obligatoires"); return; } setLoading(true); const body = { title: title.trim(), titleEn: titleEn.trim(), slug: slugify(title), subtitle: subtitle.trim(), subtitleEn: subtitleEn.trim(), content: content.trim(), contentEn: contentEn.trim(), category, iconName, iconColor, bgColor, published, order, }; try { const url = mode === "create" ? "/api/guides" : `/api/guides/${initialData?.id}`; const method = mode === "create" ? "POST" : "PUT"; const res = await fetch(url, { method, headers: { "Content-Type": "application/json" }, body: JSON.stringify(body), }); if (!res.ok) { const data = await res.json(); toast.error(data.error || "Erreur"); return; } toast.success(mode === "create" ? "Guide cree" : "Guide mis a jour"); router.push("/guides"); router.refresh(); } catch { toast.error("Une erreur est survenue"); } finally { setLoading(false); } } return (