import type { Metadata } from "next";
import { notFound } from "next/navigation";

import { buildMetadata } from "@/lib/seo";
import { siteConfig } from "@/config/site";
import { getTour } from "@/lib/sttrip-api";

import { TourPackageDetailView } from "@/features/packages/components/TourPackageDetailView";
import { getTourPackageDetail } from "@/features/packages/data/tour-package-details";

interface PageProps {
  params: Promise<{
    slug: string;
  }>;
}

export async function generateMetadata({
  params,
}: PageProps): Promise<Metadata> {
  const { slug } = await params;

  try {
    const detail = await getTour(slug);

    return buildMetadata({
      title: detail.title,
      description:
        detail.overview ||
        detail.subtitle ||
        "Tour Package",
      alternates: {
        canonical:
          `${siteConfig.url}/tour/${slug}`,
      },
    });
  } catch {
    const fallback =
      getTourPackageDetail(slug);

    if (!fallback) {
      return buildMetadata({
        title: "Tour Package",
      });
    }

    return buildMetadata({
      title: fallback.title,
      description:
        fallback.overview,
      alternates: {
        canonical:
          `${siteConfig.url}/tour/${slug}`,
      },
    });
  }
}

export default async function TourPackageDetailPage({
  params,
}: PageProps) {
  const { slug } = await params;

  let detail =
    getTourPackageDetail(slug);

  try {
    detail = await getTour(slug);
  } catch {
    // Laravel API unavailable:
    // use existing static detail when available.
  }

  if (!detail) {
    notFound();
  }

  return (
    <TourPackageDetailView
      detail={detail}
      backHref="/tour"
      backLabel="All Tour Packages"
    />
  );
}
