import { redirect } from "next/navigation";
import { isAdminSession, hasPermission, getAllPermissions } from "@/lib/adminAuth";
import { connectDB } from "@/lib/db";
import { BlogPost } from "@/models/BlogPost";
import { AdminNavLinks } from "@/components/admin/AdminNavLinks";
import { AdminPageHeader } from "@/components/admin/AdminPageHeader";
import { AdminEmptyState } from "@/components/admin/AdminEmptyState";
import { StatCard } from "@/components/admin/StatCard";
import { NewBlogPostForm } from "@/components/admin/NewBlogPostForm";
import { BlogPostRow } from "@/components/admin/BlogPostRow";

export const dynamic = "force-dynamic";

export default async function AdminBlogPage() {
  if (!(await isAdminSession())) redirect("/de/login?next=%2Fde%2Fadmin%2Forders");
  if (!(await hasPermission("blog_view"))) redirect("/de/account");

  const permissions = await getAllPermissions();
  await connectDB();
  const items = await BlogPost.find({}).sort({ publishedAt: -1 }).lean();
  const publishedCount = items.filter((i) => i.visible).length;

  return (
    <main className="px-6 pt-4 pb-24 max-w-5xl mx-auto">
      <AdminNavLinks permissions={permissions} />
      <AdminPageHeader
        title="Blog"
        subtitle="Kurze Behind-the-Scenes-Beiträge pro Shooting oder Convention — gut fürs SEO, admin-kuratiert. Sortiert nach Veröffentlichungsdatum."
      />

      <div className="grid grid-cols-3 gap-3 mb-8">
        <StatCard label="Beiträge gesamt" value={items.length} />
        <StatCard label="Veröffentlicht" value={publishedCount} />
        <StatCard label="Entwürfe" value={items.length - publishedCount} />
      </div>

      <NewBlogPostForm />

      <div className="flex flex-col gap-3">
        {items.map((item) => (
          <BlogPostRow
            key={String(item._id)}
            item={{
              id: String(item._id),
              title: item.title,
              titleEn: item.titleEn,
              slug: item.slug,
              excerpt: item.excerpt,
              excerptEn: item.excerptEn,
              content: item.content,
              contentEn: item.contentEn,
              coverImage: item.coverImage,
              tags: item.tags || [],
              publishedAt: item.publishedAt.toISOString(),
              visible: item.visible,
            }}
          />
        ))}
        {items.length === 0 && <AdminEmptyState message="Noch keine Blog-Beiträge angelegt." />}
      </div>
    </main>
  );
}
