import { notFound, permanentRedirect } from "next/navigation";
import type { Metadata } from "next";
import {
  getServiceBySlug,
  getAllServiceSlugs,
  getServiceConsolidationTarget,
  SITE_URL,
  COMPANY_NAME,
} from "@/data/services";
import ServicePageTemplate from "@/components/ServicePageTemplate";

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

export async function generateStaticParams() {
  return getAllServiceSlugs().map((slug) => ({ slug }));
}

export async function generateMetadata({
  params,
}: PageProps): Promise<Metadata> {
  const { slug } = await params;
  const consolidationTarget = getServiceConsolidationTarget(slug);
  if (consolidationTarget) {
    return {
      title: COMPANY_NAME,
      description:
        "Serviço consolidado em página pilar para reduzir conteúdo duplicado.",
      alternates: { canonical: consolidationTarget },
      robots: { index: false, follow: true },
    };
  }

  const service = getServiceBySlug(slug);
  if (!service) return {};

  return {
    title: service.title,
    description: service.description,
    alternates: { canonical: `/${slug}` },
    openGraph: {
      title: `${service.title} | ${COMPANY_NAME}`,
      description: service.description,
      url: `${SITE_URL}/${slug}`,
      images: [
        {
          url: `${SITE_URL}/images/informacoes/${slug}-01.webp`,
          width: 800,
          height: 600,
          alt: service.title,
        },
      ],
    },
  };
}

export default async function ServicePage({ params }: PageProps) {
  const { slug } = await params;
  const consolidationTarget = getServiceConsolidationTarget(slug);

  if (consolidationTarget) {
    permanentRedirect(consolidationTarget);
  }

  const service = getServiceBySlug(slug);

  if (!service) {
    notFound();
  }

  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "Service",
    name: service.title,
    description: service.description,
    provider: {
      "@type": "Organization",
      name: COMPANY_NAME,
      url: SITE_URL,
    },
    areaServed: {
      "@type": "City",
      name: "São Paulo",
    },
    url: `${SITE_URL}/${slug}`,
    image: `${SITE_URL}/images/informacoes/${slug}-01.webp`,
  };

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
      />
      <h1 className="sr-only">{service.title}</h1>
      <ServicePageTemplate service={service} />
    </>
  );
}
