import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import Header from "@/components/shared/layout/header/Header";
import JobSingle from "@/components/pages/career/JobSingle";
import Footer from "@/components/shared/layout/footer/Footer";
import CareerScrollProgressButton from "@/components/pages/career/CareerScrollProgressButton";
import CareerInitAnimations from "@/components/pages/career/CareerInitAnimations";
import { JobPosition } from "@/lib/api/careerService";
import { generateCareerMetadata } from "@/lib/seo/metadata";
import { API_CONFIG, getApiHeaders } from "@/lib/config/api";

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

// Generate static params for all job positions at build time (optional - for better performance)
// This pre-generates known pages, but new pages can still be generated on-demand
export async function generateStaticParams() {
  try {
    // Use internal API URL for server-side requests
    const apiUrl = process.env.INTERNAL_API_URL || process.env.NEXT_PUBLIC_API_URL || 'http://127.0.0.1:1086';
    const response = await fetch(
      `${apiUrl}/api/career/jobs`,
      {
        method: 'GET',
        headers: getApiHeaders(),
        next: { revalidate: 60 }, // Revalidate every minute
      }
    );

    if (!response.ok) {
      console.error('Error fetching jobs for static params:', response.status);
      return [];
    }

    const data = await response.json();
    const jobs = data.results || data;
    
    return jobs.map((job: JobPosition) => ({
      slug: job.slug,
    }));
  } catch (error) {
    console.error('Error generating static params for jobs:', error);
    return [];
  }
}

// Generate metadata for each job page
export async function generateMetadata({ params }: JobPageProps): Promise<Metadata> {
  const { slug } = await params;
  
  try {
    // Use internal API URL for server-side requests
    const apiUrl = process.env.INTERNAL_API_URL || process.env.NEXT_PUBLIC_API_URL || 'http://127.0.0.1:1086';
    const response = await fetch(
      `${apiUrl}/api/career/jobs/${slug}`,
      {
        method: 'GET',
        headers: getApiHeaders(),
        next: { revalidate: 60 }, // Revalidate every minute
      }
    );

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const job = await response.json();
    
    return generateCareerMetadata({
      title: job.title,
      description: job.short_description || job.about_role,
      slug: job.slug,
      location: job.location,
      department: job.department,
      employment_type: job.employment_type,
    });
  } catch (error) {
    return {
      title: 'Job Not Found | GNX Soft',
      description: 'The requested job position could not be found.',
    };
  }
}

const JobPage = async ({ params }: JobPageProps) => {
  const { slug } = await params;
  
  try {
    // Use internal API URL for server-side requests
    const apiUrl = process.env.INTERNAL_API_URL || process.env.NEXT_PUBLIC_API_URL || 'http://127.0.0.1:1086';
    const response = await fetch(
      `${apiUrl}/api/career/jobs/${slug}`,
      {
        method: 'GET',
        headers: getApiHeaders(),
        next: { revalidate: 60 }, // Revalidate every minute
      }
    );

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const job: JobPosition = await response.json();

    return (
      <div className="tp-app">
        <Header />
        <main>
          <JobSingle job={job} />
        </main>
        <Footer />
        <CareerScrollProgressButton />
        <CareerInitAnimations />
      </div>
    );
  } catch (error) {
    notFound();
  }
};

export default JobPage;
