import { saveSiteSectionAction } from "@/app/admin/actions";
import AdminFeedback from "@/components/admin/AdminFeedback";
import { CheckField, FormCard, SubmitButton, TextAreaField, TextField } from "@/components/admin/AdminFormFields";
import AdminShell from "@/components/admin/AdminShell";
import { requireAdminPermission } from "@/lib/auth";
import { prisma } from "@/lib/db";
import { GripVertical } from "lucide-react";
import { hasAdminPermission } from "@/lib/admin-permissions";

export const revalidate = 0;

export default async function AdminSectionsPage({ searchParams }: { searchParams: Promise<Record<string, string | string[] | undefined>> }) {
  const session = await requireAdminPermission("sections", "view");
  const canEdit = hasAdminPermission(session, "sections", "edit");
  const canPublish = hasAdminPermission(session, "sections", "publish");
  const query = await searchParams;
  const sections = await prisma.siteSection.findMany({ orderBy: [{ order: "asc" }, { key: "asc" }] });

  return (
    <AdminShell eyebrow="Sayfa kompozisyonu" title="Ana sayfa bölümleri" description="Ana sayfadaki büyük anlatı bloklarını kod silmeden açıp kapatın ve yayın sırasını belirleyin. Tasarım varyantları kontrollü seçenekler olarak geliştirilecektir.">
      <AdminFeedback saved={typeof query.saved === "string" ? query.saved : undefined} error={typeof query.error === "string" ? query.error : undefined} />
      <div className="grid gap-5 xl:grid-cols-2">
        {sections.map((section) => (
          <FormCard key={section.id} title={`${String(section.order).padStart(2, "0")} · ${section.label}`} subtitle={`Sistem anahtarı: ${section.key}`}>
            <form action={saveSiteSectionAction} className="space-y-5">
              <input type="hidden" name="id" value={section.id} />
              <div className="grid gap-4 md:grid-cols-[1fr_130px]">
                <TextField label="Panelde görünen ad" name="label" defaultValue={section.label} required />
                <TextField label="Yayın sırası" name="order" type="number" min={0} max={999} defaultValue={section.order} />
              </div>
              <TextField label="Tasarım varyantı" name="variant" defaultValue={section.variant} placeholder="default" />
              <TextAreaField label="Editör notu" name="notes" defaultValue={section.notes} rows={3} placeholder="Bu bölüm için materyal, revize veya yayın notu..." />
              {canPublish ? <CheckField label="Bölümü yayında göster" name="enabled" defaultChecked={section.enabled} description="Kapatıldığında içerik silinmez ve panelde tutulur." /> : <>{section.enabled ? <input type="hidden" name="enabled" value="on" /> : null}<p className="text-xs text-fg-muted">Bölüm görünürlüğünü değiştirme yetkiniz yok.</p></>}
              <div className="flex items-center justify-between border-t border-border pt-5">
                <span className="inline-flex items-center gap-2 text-[10px] uppercase tracking-[0.14em] text-fg-muted"><GripVertical size={13} /> Sıra numarasıyla konumlanır</span>
                {canEdit ? <SubmitButton>Bölümü güncelle</SubmitButton> : <span className="text-xs text-fg-muted">Yalnız görüntüleme</span>}
              </div>
            </form>
          </FormCard>
        ))}
      </div>
    </AdminShell>
  );
}
