'use client' import { useState } from 'react' import { useTranslations, useLocale } from 'next-intl' import type { NewsItem } from '@/lib/admin-news' const EMPTY = { titulo: '', tituloEn: '', contenido: '', contenidoEn: '', enlace: '' } type Draft = typeof EMPTY export function AdminNewsManager({ initialNews }: { initialNews: NewsItem[] }) { const t = useTranslations('Admin') const locale = useLocale() const [news, setNews] = useState(initialNews) const [draft, setDraft] = useState(EMPTY) const [busy, setBusy] = useState(false) const [error, setError] = useState(null) const [editId, setEditId] = useState(null) const [edit, setEdit] = useState(EMPTY) async function create(e: React.FormEvent) { e.preventDefault() if (busy || !draft.titulo.trim() || !draft.contenido.trim()) return setBusy(true) setError(null) try { const res = await fetch('/api/admin/news', { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin', body: JSON.stringify(draft), }) const data: { success?: boolean; id?: number } = await res.json() if (data.success && data.id) { setNews([{ id: data.id, ...draft, fecha: new Date().toISOString(), enlace: draft.enlace || null }, ...news]) setDraft(EMPTY) } else setError(t('genericError')) } catch { setError(t('genericError')) } finally { setBusy(false) } } function startEdit(n: NewsItem) { setEditId(n.id) setEdit({ titulo: n.titulo, tituloEn: n.tituloEn, contenido: n.contenido, contenidoEn: n.contenidoEn, enlace: n.enlace || '' }) setError(null) } async function save(id: number) { if (busy || !edit.titulo.trim() || !edit.contenido.trim()) return setBusy(true) setError(null) try { const res = await fetch(`/api/admin/news/${id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin', body: JSON.stringify(edit), }) const data: { success?: boolean } = await res.json() if (data.success) { setNews(news.map((n) => (n.id === id ? { ...n, ...edit, enlace: edit.enlace || null } : n))) setEditId(null) } else setError(t('genericError')) } catch { setError(t('genericError')) } finally { setBusy(false) } } async function remove(id: number) { if (!confirm(t('confirmDelete'))) return const res = await fetch(`/api/admin/news/${id}`, { method: 'DELETE', credentials: 'same-origin' }) const data: { success?: boolean } = await res.json() if (data.success) setNews(news.filter((n) => n.id !== id)) } return (
setDraft({ ...draft, titulo: e.target.value })} placeholder={t('newsTitle')} maxLength={200} />