'use client'; import { useEffect, useState } from 'react'; import api from '@/lib/api'; import type { Emotion } from '@/types'; import Button from '@/components/ui/Button'; import Input from '@/components/ui/Input'; import Modal from '@/components/ui/Modal'; import toast from 'react-hot-toast'; export default function AdminEmotionsPage() { const [emotions, setEmotions] = useState([]); const [loading, setLoading] = useState(true); const [modalOpen, setModalOpen] = useState(false); const [editingEmotion, setEditingEmotion] = useState(null); const [formLoading, setFormLoading] = useState(false); const [form, setForm] = useState({ nom: '', couleur: '#fce117', icone: '', niveau: 1, parent_id: null as number | null, est_actif: true, }); const fetchEmotions = async () => { try { const res = await api.get('/admin/emotions'); setEmotions(Array.isArray(res.data) ? res.data : res.data?.data || []); } catch { toast.error('Erreur lors du chargement'); } finally { setLoading(false); } }; useEffect(() => { fetchEmotions(); }, []); const parentEmotions = emotions.filter((e) => e.niveau === 1); const openCreate = (parentId?: number) => { setEditingEmotion(null); setForm({ nom: '', couleur: '#fce117', icone: '', niveau: parentId ? 2 : 1, parent_id: parentId || null, est_actif: true, }); setModalOpen(true); }; const openEdit = (emotion: Emotion) => { setEditingEmotion(emotion); setForm({ nom: emotion.nom, couleur: emotion.couleur, icone: emotion.icone || '', niveau: emotion.niveau, parent_id: emotion.parent_id, est_actif: emotion.est_actif, }); setModalOpen(true); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setFormLoading(true); try { const payload = { ...form, icone: form.icone || null }; if (editingEmotion) { await api.put(`/admin/emotions/${editingEmotion.id}`, payload); toast.success('Émotion mise à jour'); } else { await api.post('/admin/emotions', payload); toast.success('Émotion créée'); } setModalOpen(false); await fetchEmotions(); } catch (err: unknown) { const axiosError = err as import('axios').AxiosError<{ message?: string }>; toast.error(axiosError.response?.data?.message || 'Erreur'); } finally { setFormLoading(false); } }; const handleDelete = async (id: number) => { if (!confirm('Supprimer cette émotion ?')) return; try { await api.delete(`/admin/emotions/${id}`); await fetchEmotions(); toast.success('Émotion supprimée'); } catch { toast.error('Erreur lors de la suppression'); } }; const colorSwatch = (couleur: string) => (