import type { Metadata } from "next";

import { buildMetadata, SITE_URL } from "@/lib/seo";
import type { ZoneData } from "@/data/zones";
import {
  mockZoneVille,
  mockZoneDepartement,
  mockZoneRegion,
} from "@/data/zones";
import { buildLocalMetaDescription, buildLocalMetaTitle } from "@/lib/localSeoWorkflow";

/**
 * SEO des pages locales (/:slug — "peinture cool roof [ville/département/région]").
 * Reproduit la logique historiquement embarquée dans src/pages/LocalSEO.tsx
 * (metaTitle / metaDescription / canonical / JSON-LD LocalBusiness).
 */

/** Slugs des 3 pages template mock (noindex), conservées pour le développement. */
export const MOCK_ZONE_SLUGS = [
  "cool-roof-ville",
  "cool-roof-departement",
  "cool-roof-region",
] as const;

export interface ResolvedZone {
  zoneData: ZoneData;
  isMock: boolean;
}

/**
 * Résout uniquement les 3 templates mock conservés pour le développement.
 * Les vraies pages locales viennent du CPT WordPress `lieu`.
 */
export function resolveZone(slug: string): ResolvedZone | undefined {
  if (slug === "cool-roof-ville") return { zoneData: mockZoneVille, isMock: true };
  if (slug === "cool-roof-departement") return { zoneData: mockZoneDepartement, isMock: true };
  if (slug === "cool-roof-region") return { zoneData: mockZoneRegion, isMock: true };

  return undefined;
}

export function buildZoneSeoBase(zoneData: ZoneData): {
  title: string;
  description: string;
  canonical: string;
} {
  const { pageType } = zoneData;
  const isDepartement = pageType === "departement";
  const isRegion = pageType === "region";

  const title = buildLocalMetaTitle(zoneData);
  const description = buildLocalMetaDescription(zoneData);

  const canonical = isRegion
    ? `${SITE_URL}/${zoneData.slugRegion}`
    : isDepartement
      ? `${SITE_URL}/${zoneData.slugDepartement}`
      : `${SITE_URL}/${zoneData.slugVille}`;

  return { title, description, canonical };
}

export function buildZoneJsonLd(
  zoneData: ZoneData,
  options: { description?: string; canonical?: string } = {},
): unknown {
  const isRegion = zoneData.pageType === "region";
  const base = buildZoneSeoBase(zoneData);

  return {
    "@context": "https://schema.org",
    "@type": "LocalBusiness",
    name: "Covalba",
    description: options.description ?? base.description,
    url: options.canonical ?? base.canonical,
    areaServed: {
      "@type": "AdministrativeArea",
      name: isRegion ? zoneData.region : zoneData.departement,
    },
    address: {
      "@type": "PostalAddress",
      addressRegion: zoneData.region,
      addressCountry: zoneData.pays ?? "FR",
    },
  };
}

export function buildZoneSeo(
  zoneData: ZoneData,
  options: { noindex?: boolean } = {},
): { metadata: Metadata; jsonLd: unknown } {
  const base = buildZoneSeoBase(zoneData);

  const metadata = buildMetadata({
    title: base.title,
    description: base.description,
    canonical: base.canonical,
    ...(options.noindex ? { robots: "noindex, nofollow" } : {}),
  });

  return { metadata, jsonLd: buildZoneJsonLd(zoneData, base) };
}
