import { getTranslations, setRequestLocale } from "next-intl/server";
import { Link } from "@/i18n/navigation";
import { CopyButton } from "@/components/copy-button";
import { ShopProductForm } from "@/components/shop-product-form";
import { getShopByOwner, listProducts, productPublicUrl } from "@/lib/shop";
import { requireUser } from "@/lib/session";

export default async function ShopProductsPage({
  params,
}: {
  params: Promise<{ locale: string }>;
}) {
  const { locale } = await params;
  setRequestLocale(locale);
  const session = await requireUser();
  const t = await getTranslations("shop");
  const shop = await getShopByOwner(session.user.id);
  if (!shop) {
    return (
      <div className="space-y-4">
        <h1 className="page-title">{t("productsTitle")}</h1>
        <p className="text-muted">{t("needShop")}</p>
        <Link href="/dashboard/shop" className="btn-primary">
          {t("create")}
        </Link>
      </div>
    );
  }
  const products = await listProducts(shop.id);
  const productLinks = Object.fromEntries(
    await Promise.all(products.map(async (item) => [item.id, await productPublicUrl(shop.slug, item.id)])),
  );

  return (
    <div className="space-y-6">
      <div className="flex flex-wrap items-center justify-between gap-3">
        <h1 className="page-title">{t("productsTitle")}</h1>
        <Link href="/dashboard/shop" className="text-sm text-brand">
          {t("back")}
        </Link>
      </div>
      <ShopProductForm />
      <section className="card overflow-x-auto">
        <h2 className="p-4 font-semibold">{t("myProducts")}</h2>
        {products.length === 0 ? <p className="px-4 pb-4 text-sm text-muted">{t("noProducts")}</p> : null}
        <ul className="divide-y divide-line">
          {products.map((item) => {
            const link = productLinks[item.id] ?? "";
            return (
              <li key={item.id} className="flex flex-col gap-2 p-4 sm:flex-row sm:items-center sm:justify-between">
                <div>
                  <p className="font-medium">{item.title}</p>
                  <p className="text-sm text-muted">
                    {item.price} {shop.currency} · {item.sizes.map((s) => `${s.label}:${s.qty}`).join(" · ")}
                  </p>
                  <p className="mt-1 truncate text-xs" dir="ltr">
                    {link}
                  </p>
                </div>
                <CopyButton value={link} />
              </li>
            );
          })}
        </ul>
      </section>
    </div>
  );
}
