"use client";

import { useEffect, useState } from "react";
import { useParams, useRouter } from "next/navigation";
import { NewsEditor } from "@/components/admin/news/NewsEditor";
import { fetchAllNews, updateNews } from "@/lib/news";
import type { NewsArticle, NewsFormData } from "@/lib/news";
import { toast } from "sonner";
import { useAdminLocale } from "@/hooks/use-admin-locale";

export default function EditNewsPage() {
  const { id } = useParams<{ id: string }>();
  const router = useRouter();
  const locale = useAdminLocale();
  const [article, setArticle] = useState<NewsArticle | null>(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetchAllNews()
      .then((articles) => {
        const found = articles.find((a) => String(a.id) === id);
        if (!found) {
          toast.error("Article not found.");
          router.push("/admin/news");
          return;
        }
        setArticle(found);
      })
      .catch(() => {
        toast.error("Failed to load article.");
        router.push("/admin/news");
      })
      .finally(() => setLoading(false));
  }, [id, router]);

  const handleSave = async (data: NewsFormData) => {
    await updateNews(Number(id), {
      title: { [locale]: data.title },
      excerpt: { [locale]: data.excerpt },
      content: { [locale]: data.content },
      seo_title: data.seo_title ? { [locale]: data.seo_title } : undefined,
      seo_description: data.seo_description ? { [locale]: data.seo_description } : undefined,
      slug: data.slug,
      image_url: data.image_url,
      image_public_id: data.image_public_id,
      og_image: data.og_image,
      og_image_public_id: data.og_image_public_id,
      category_id: data.category_id,
      author: data.author,
      published_at: data.published_at,
      is_published: data.is_published,
      focus_keyword: data.focus_keyword,
      canonical_url: data.canonical_url,
    });
    toast.success("Article updated.");
    router.push("/admin/news");
  };

  if (loading) {
    return (
      <div className="flex items-center justify-center h-[60vh] text-sm text-muted-foreground">
        Loading article…
      </div>
    );
  }

  if (!article) return null;

  return <NewsEditor initial={article} onSave={handleSave} />;
}
