// src/app/(root)/package/[slug]/page.tsx
import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import PackageDetailClient from './PackageDetailClient';

export async function generateMetadata({ params }: { params: { slug: string } }): Promise<Metadata> {
  try {
    const { slug } = await params;
    const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
    const response = await fetch(`${baseUrl}/api/frontend/packages/${slug}`, {
      next: { revalidate: 300 },
    });
    
    const result = await response.json();

    if (!result.success || !result.data) {
      return {
        title: 'Package Not Found',
        description: 'The requested package could not be found.',
      };
    }

    const pkg = result.data;

    return {
      title: pkg.meta_title || `${pkg.name} Package | Guest Post Marketplace`,
      description: pkg.meta_description || pkg.description || `Get our ${pkg.name} package with premium guest post placements on authoritative websites.`,
      openGraph: {
        title: pkg.meta_title || `${pkg.name} Package`,
        description: pkg.meta_description || pkg.description,
        type: 'website',
      },
    };
  } catch (error) {
    console.error('Error generating metadata:', error);
    return {
      title: 'Guest Post Packages',
      description: 'Get premium guest post packages on authoritative websites.',
    };
  }
}

async function getPackageData(slug: string) {
  try {
    const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
    const response = await fetch(`${baseUrl}/api/frontend/packages/${slug}`, {
      next: { revalidate: 300 },
    });
    
    const result = await response.json();

    if (!result.success) {
      return null;
    }

    return {
      package: result.data,
      websites: result.websites || [],
      relatedPackages: result.relatedPackages || [],
    };
  } catch (error) {
    console.error('Error fetching package:', error);
    return null;
  }
}

export default async function PackageDetailPage({ params }: { params: { slug: string } }) {
  const { slug } = await params;
  const data = await getPackageData(slug);

  if (!data) {
    notFound();
  }

  return <PackageDetailClient initialData={data} slug={slug} />;
}