import { headers } from "next/headers";

export default async function DynamicPageSchema() {
  try {
    // get current pathname from middleware header
    const headersList = await headers();
    const pathname = headersList.get("x-pathname") || "/";

    // fetch schema from api
    const res = await fetch(
      `${process.env.NEXT_PUBLIC_SITE_URL}/api/schema?path=${pathname}`,
      {
        cache: "no-store",
      }
    );

    if (!res.ok) {
      console.error("Schema API failed");
      return null;
    }

    const data = await res.json();

    if (!data?.schema) {
      return null;
    }

    let schemas: any[] = [];

    try {
      let rawSchema = data.schema.trim();

      // ----------------------------------------------------
      // CASE 1:
      // DB contains <script type="application/ld+json">...</script>
      // ----------------------------------------------------
      if (rawSchema.includes("<script")) {
        const matches = [
          ...rawSchema.matchAll(
            /<script[^>]*application\/ld\+json[^>]*>([\s\S]*?)<\/script>/gi
          ),
        ];

        schemas = matches.map((match) => JSON.parse(match[1].trim()));
      }

      // ----------------------------------------------------
      // CASE 2:
      // DB contains pure JSON object
      // ----------------------------------------------------
      else {
        const parsed = JSON.parse(rawSchema);

        schemas = Array.isArray(parsed) ? parsed : [parsed];
      }
    } catch (err) {
      console.error("Schema parse error:", err);
      console.error("Raw schema:", data.schema);
      return null;
    }

    return (
      <>
        {schemas.map((item: any, index: number) => (
          <script
            key={index}
            type="application/ld+json"
            dangerouslySetInnerHTML={{
              __html: JSON.stringify(item),
            }}
          />
        ))}
      </>
    );
  } catch (err) {
    console.error("Dynamic schema error:", err);
    return null;
  }
}