import Link from "next/link";
import { notFound } from "next/navigation";
import { AdminHeader, SavedNotice } from "@/components/admin/ui";
import { ProductForm } from "@/components/admin/ProductForm";
import { db } from "@/lib/db";
import { productFormInitial, productFormOptions } from "@/server/admin/product-form-data";
import { requireStaffPage } from "@/server/admin/guard";

export const metadata = { title: "ویرایش محصول" };
export const dynamic = "force-dynamic";

export default async function EditProductPage({ params, searchParams }: { params: Promise<{ id: string }>; searchParams: Promise<{ saved?: string }> }) {
  await requireStaffPage("/admin/products", "products");
  const { id } = await params;
  if (!/^\d{1,9}$/.test(id)) notFound();
  const [initial, options, images] = await Promise.all([
    productFormInitial(Number(id)),
    productFormOptions(),
    db.productImage.findMany({ where: { productId: Number(id) }, orderBy: [{ sortOrder: "asc" }, { id: "asc" }], select: { id: true, url: true, alt: true, variantId: true } }),
  ]);
  if (!initial) notFound();
  return (
    <>
      <AdminHeader
        title={initial.name}
        actions={<Link href={`/p/${id}`} target="_blank" className="btn-outline h-10 px-4">مشاهده در سایت</Link>}
      />
      <SavedNotice show={(await searchParams).saved === "1"} text="محصول ذخیره شد" />
      <ProductForm id={Number(id)} initial={initial} images={images} {...options} />
    </>
  );
}
