import CamelGroupAuctionClient from "@/components/annaulMazad/CamelGroupAuctionClient";
import AuctionDetailsOnlyClient from "@/components/annaulMazad/AuctionDetailsOnlyClient";
import {
  getGroupAuctionById,
  getGroupSingleAuctions,
  getAuctionGroups,
  GroupSingleAuctionsResponse,
} from "@/actions/group-auctions";
import { metaObject } from "@/config/site.config";
import { buildHorseFallbackRooms } from "@/lib/annualAuctionGroups";
import { getLocale, getTranslations } from "next-intl/server";

export async function generateMetadata({
  params,
}: {
  params: Promise<{ id: string; lang: string }>;
}) {
  const { id } = await params;
  const locale = await getLocale();
  const t = await getTranslations({
    locale,
    namespace: "ANNUAL_AUCTION_DETAILS_PAGE",
  });
  let title = t("meta_title");

  try {
    const auction = await getGroupAuctionById(id);
    const auctionTitle = (auction as any)?.title;
    if (auctionTitle) {
      title = auctionTitle;
    }
  } catch {
    // ignore metadata fetch errors
  }

  return metaObject(
    title,
    t("meta_description"),
    undefined,
    undefined,
    `/annual-auctions/${id}`,
  );
}

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

export default async function AnnualAuctionDetailsPage({ params }: Props) {
  const { id } = await params;
  const auction = await getGroupAuctionById(id);
  const availabilityStatus = (auction as any)?.availability_status;
  const auctionState = (auction as any)?.auction_state;

  // Show details-only view for upcoming auctions available for buyers (no items table)
  if (
    availabilityStatus === "available_for_buyers" &&
    auctionState === "upcoming"
  ) {
    const [roomsRes, innerUpcoming] = await Promise.all([
      getAuctionGroups(id),
      getGroupSingleAuctions(id),
    ]);
    const innerItemsUpcoming = innerUpcoming?.data?.data || [];
    const rooms = buildHorseFallbackRooms(
      auction,
      (roomsRes as any)?.data?.data || [],
      innerItemsUpcoming,
    );
    const maxAllowedDay = Number((auction as any)?.max_allowed_day);
    const maxDays = Number.isFinite(maxAllowedDay)
      ? Math.max(0, maxAllowedDay - 1)
      : 0;
    return (
      <AuctionDetailsOnlyClient
        auction={auction}
        initialRooms={rooms}
        maxDays={maxDays}
      />
    );
  }

  const inner: GroupSingleAuctionsResponse = await getGroupSingleAuctions(id);
  const roomsRes = await getAuctionGroups(id);
  const innerItems = inner?.data?.data || [];
  const rooms = buildHorseFallbackRooms(
    auction,
    (roomsRes as any)?.data?.data || [],
    innerItems,
  );
  const maxAllowedDay = Number((auction as any)?.max_allowed_day);
  const maxDays = Number.isFinite(maxAllowedDay)
    ? Math.max(0, maxAllowedDay - 1)
    : 0;
  return (
    <CamelGroupAuctionClient
      auction={auction}
      initialInnerAuctions={innerItems}
      initialNextCursor={inner?.data?.meta.next_cursor}
      initialRooms={rooms}
      maxDays={maxDays}
    />
  );
}
