import AnnualItemDetailsClient from "@/components/AnnualItemDetailsClient";
import { getSingleAuctionById } from "@/actions/auction";
import {
  getAuctionGroupById,
  getGroupAuctionById,
} from "@/actions/group-auctions";
import { metaObject, siteConfig } from "@/config/site.config";
import { getLocale, getTranslations } from "next-intl/server";
import type { Metadata } from "next";

export async function generateMetadata({
  params,
}: {
  params: Promise<{ lang: string; id: string }>;
}): Promise<Metadata> {
  const { id } = await params;
  const locale = await getLocale();
  const isArabic = locale === "ar";
  let title = isArabic ? "تفاصيل" : "Details";
  let description = isArabic
    ? "تفاصيل العنصر في المزاد السنوي"
    : "Annual auction item details";
  let ogImage: string | undefined;

  try {
    const item = await getSingleAuctionById(id);
    const itemTitle =
      (item as any)?.horse?.name ||
      (item as any)?.camel?.name ||
      (item as any)?.title;
    if (itemTitle) title = itemTitle;
    if ((item as any)?.description) description = (item as any).description;
    ogImage = (item as any)?.media_files?.main_image?.url || undefined;
  } catch {}

  // Ensure ogImage is an absolute URL for correct social/Twitter cards
  if (ogImage && ogImage.startsWith("/")) {
    ogImage = `${siteConfig.url}${ogImage}`;
  }

  const url = `${siteConfig.url}/${locale}/annual-item/${id}`;

  return {
    ...metaObject(title, description, undefined, ogImage, `/annual-item/${id}`),
    openGraph: {
      title,
      description,
      url,
      siteName: siteConfig.siteName,
      images: ogImage
        ? [{ url: ogImage, width: 1200, height: 630 }]
        : undefined,
      locale: isArabic ? "ar_SA" : "en_US",
      type: "website",
    },
    twitter: {
      card: "summary_large_image",
      title,
      description,
      images: ogImage ? [ogImage] : undefined,
    },
  };
}

type Props = {
  params: Promise<{ lang: string; id: string }>;
};

export default async function AnnualItemDetailsPage({ params }: Props) {
  const { id } = await params;
  const locale = await getLocale();
  const isArabic = locale === "ar";
  const dir = isArabic ? "rtl" : "ltr";
  const t = await getTranslations("ANNUAL_ITEM_PAGE");

  try {
    const item = await getSingleAuctionById(id);
    if (!item) {
      return (
        <div className="text-center py-20 text-red-600 font-bold" dir={dir}>
          {t("not_found")}
        </div>
      );
    }

    let auctionGroup = null;
    let groupAuction = null;
    const groupAuctionId = (item as any)?.group_auction_id;
    const auctionGroupId = (item as any)?.auction_group_id;
    if (groupAuctionId && auctionGroupId) {
      try {
        auctionGroup = await getAuctionGroupById(groupAuctionId, auctionGroupId);
        groupAuction = await getGroupAuctionById(groupAuctionId);
      } catch {
        // ignore
      }
    }

    return (
      <AnnualItemDetailsClient
        item={item as any}
        auctionGroup={auctionGroup as any}
        groupAuction={groupAuction as any}
        groupAuctionId={groupAuctionId as string | null}
        auctionGroupId={auctionGroupId as string | null}
      />
    );
  } catch (error) {
    console.error("❌ Error fetching single auction details:", error);
    return (
      <div className="text-center py-20 text-red-600 font-bold" dir={dir}>
        {t("fetch_error_title")}
        <br />
        <span className="text-sm text-slate-600">{t("fetch_error_hint")}</span>
      </div>
    );
  }
}
