import AnnualSingleAuctionClient from "@/(pages)/autionClient/AnnualSingleAuctionClient";
import { getSingleAuctionById } from "@/actions/auction";
import { getGroupAuctionById } from "@/actions/group-auctions";
import { metaObject } from "@/config/site.config";
import { getLocale } from "next-intl/server";

type AnnualSingleAuctionPayload = NonNullable<
  Awaited<ReturnType<typeof getSingleAuctionById>>
>;

/** When single-auction payload omits paddle fees, load parent group_auction (same source as group detail page). */
async function mergeGroupAuctionPaddlePricesFromApi(
  item: AnnualSingleAuctionPayload,
): Promise<AnnualSingleAuctionPayload> {
  if (!item || typeof item !== "object") return item;
  const o = item as Record<string, unknown>;
  const nestedGa = o.group_auction as Record<string, unknown> | undefined;
  const nestedAg = o.auction_group as Record<string, unknown> | undefined;
  const nestedAgGa = nestedAg?.group_auction as
    | Record<string, unknown>
    | undefined;

  const gaId = String(
    o.group_auction_id ??
      (o as { groupAuctionId?: string }).groupAuctionId ??
      nestedGa?.id ??
      nestedAg?.group_auction_id ??
      nestedAgGa?.id ??
      "",
  ).trim();
  if (!gaId) return item;

  const currentNormal = Number(
    o.normal_paddle_price ?? nestedGa?.normal_paddle_price ?? 0,
  );
  if (Number.isFinite(currentNormal) && currentNormal > 0) return item;

  try {
    const auction = await getGroupAuctionById(gaId);
    const npRaw = auction?.normal_paddle_price;
    const n = Number(npRaw ?? 0);
    if (!Number.isFinite(n) || n <= 0) return item;

    const prevGa =
      nestedGa && typeof nestedGa === "object" ? { ...nestedGa } : {};

    return {
      ...o,
      group_auction_id: o.group_auction_id ?? gaId,
      normal_paddle_price: o.normal_paddle_price ?? n,
      group_auction: {
        ...prevGa,
        id: prevGa.id ?? gaId,
        normal_paddle_price: prevGa.normal_paddle_price ?? npRaw,
        premium_paddle_price:
          prevGa.premium_paddle_price ?? auction.premium_paddle_price,
        premium_use_times:
          prevGa.premium_use_times ?? auction.premium_use_times,
      },
    } as AnnualSingleAuctionPayload;
  } catch {
    return item;
  }
}

export async function generateMetadata({
  params,
}: {
  params: Promise<{ lang: string; id: string }>;
}) {
  const { id } = await params;
  const locale = await getLocale();
  const isArabic = locale === "ar";
  let title = isArabic ? "المزاد الجماعي" : "Annual Auction";

  try {
    const item = await getSingleAuctionById(id);
    const itemTitle = (item as any)?.title;
    if (itemTitle) {
      title = itemTitle;
    }
  } catch {
    // ignore metadata fetch errors
  }

  return metaObject(
    title,
    isArabic ? "تفاصيل المزاد الجماعي." : "Annual auction details.",
    undefined,
    undefined,
    `/annual/${id}`,
  );
}

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

export default async function AnnualSingleAuctionPage({ params }: Props) {
  const { id } = await params;
  const rawItem = await getSingleAuctionById(id);
  const item = rawItem
    ? await mergeGroupAuctionPaddlePricesFromApi(rawItem)
    : null;

  if (!item) {
    return (
      <div className="text-center py-20 text-red-600 font-bold">
        ❌ لم يتم العثور على المزاد الجماعي الفردي
      </div>
    );
  }

  return (
    <div dir="rtl" className="bg-[#FBF9F6] min-h-screen">
      <AnnualSingleAuctionClient item={item} />
    </div>
  );
}
