"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; import { Client, ClientInput } from "@/lib/types/client"; import QRCodeDisplay from "./QRCodeDisplay"; import { Copy, Check } from "lucide-react"; interface ClientFormProps { client?: Client; onSuccess: () => void; onCancel: () => void; } export default function ClientForm({ client, onSuccess, onCancel }: ClientFormProps) { const [formData, setFormData] = useState({ email: client?.email || "", bungalowNumber: client?.bungalowNumber || "", wifiName: client?.wifiName || "Lagon-WiFi", wifiPassword: client?.wifiPassword || "", gerantMessage: client?.gerantMessage || "Bienvenue dans notre pension de famille !", }); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [createdClient, setCreatedClient] = useState(client || null); const [copied, setCopied] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(null); try { const adminPassword = localStorage.getItem("adminPassword") || ""; const url = client ? `/api/admin/clients/${client.id}` : "/api/admin/clients"; const method = client ? "PUT" : "POST"; const response = await fetch(url, { method, headers: { "Content-Type": "application/json", Authorization: `Bearer ${adminPassword}`, }, body: JSON.stringify(formData), }); if (!response.ok) { const data = await response.json(); throw new Error(data.error || "Erreur lors de la sauvegarde"); } const data = await response.json(); setCreatedClient(data); onSuccess(); } catch (err: any) { setError(err.message); } finally { setLoading(false); } }; const getClientUrl = () => { if (!createdClient) return ""; const baseUrl = typeof window !== "undefined" ? window.location.origin : ""; return `${baseUrl}/accueil?token=${createdClient.token}`; }; const handleCopyLink = async () => { try { await navigator.clipboard.writeText(getClientUrl()); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { console.error("Erreur lors de la copie:", err); // Fallback pour les navigateurs plus anciens const textArea = document.createElement("textarea"); textArea.value = getClientUrl(); document.body.appendChild(textArea); textArea.select(); try { document.execCommand("copy"); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (e) { alert("Impossible de copier. Veuillez copier manuellement le lien."); } document.body.removeChild(textArea); } }; return ( {client ? "Modifier le client" : "Nouveau client"}
setFormData({ ...formData, email: e.target.value })} disabled={!!client} className="w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent disabled:bg-gray-100" />
setFormData({ ...formData, bungalowNumber: e.target.value }) } className="w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent" />
setFormData({ ...formData, wifiName: e.target.value }) } className="w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent" />
setFormData({ ...formData, wifiPassword: e.target.value }) } className="w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent" />