const BASE_URL = "https://viaturas.online";


const STATIC_ROUTES = [
  { path: "/", priority: "1.0", changefreq: "daily" },
  { path: "/vehicles", priority: "0.9", changefreq: "daily" },
  { path: "/bikes", priority: "0.9", changefreq: "daily" },
  { path: "/trucks", priority: "0.9", changefreq: "daily" },
  { path: "/machines", priority: "0.9", changefreq: "daily" },
  { path: "/parts", priority: "0.9", changefreq: "daily" },
  { path: "/terms", priority: "0.3", changefreq: "monthly" },
  { path: "/privacy", priority: "0.3", changefreq: "monthly" },
];

type AdEntry = {
  id: string;
  updatedAt?: unknown;
  createdAt?: unknown;
};

function toDateString(value: unknown): string | undefined {
  if (!value) return undefined;
  // Firestore Timestamp: { _seconds: number, _nanoseconds: number }
  if (typeof value === "object" && "_seconds" in (value as object)) {
    return new Date((value as { _seconds: number })._seconds * 1000)
      .toISOString()
      .slice(0, 10);
  }
  // Unix timestamp in milliseconds
  if (typeof value === "number") {
    return new Date(value).toISOString().slice(0, 10);
  }
  // ISO string
  if (typeof value === "string") {
    return value.slice(0, 10);
  }
  return undefined;
}

async function fetchIds(endpoint: string): Promise<AdEntry[]> {
  try {
    const res = await fetch(`${API_BASE}${endpoint}?limit=5000`);
    if (!res.ok) return [];
    const data = await res.json();
    const items: AdEntry[] = Array.isArray(data)
      ? data
      : Array.isArray(data?.vehicles)
      ? data.vehicles
      : Array.isArray(data?.bikes)
      ? data.bikes
      : Array.isArray(data?.trucks)
      ? data.trucks
      : Array.isArray(data?.machinery)
      ? data.machinery
      : Array.isArray(data?.parts)
      ? data.parts
      : [];
    return items;
  } catch {
    return [];
  }
}

function urlEntry(
  loc: string,
  lastmod?: string,
  changefreq = "weekly",
  priority = "0.7"
) {
  return `  <url>
    <loc>${loc}</loc>${lastmod ? `\n    <lastmod>${lastmod}</lastmod>` : ""}
    <changefreq>${changefreq}</changefreq>
    <priority>${priority}</priority>
  </url>`;
}

export async function loader() {
  const [vehicles, bikes, trucks, machines, parts] = await Promise.all([
    fetchIds("/vehicles"),
    fetchIds("/bikes"),
    fetchIds("/trucks"),
    fetchIds("/machinery"),
    fetchIds("/parts"),
  ]);

  const staticEntries = STATIC_ROUTES.map(({ path, priority, changefreq }) =>
    urlEntry(`${BASE_URL}${path}`, undefined, changefreq, priority)
  );

  const dynamicEntries = [
    ...vehicles.map((v) =>
      urlEntry(
        `${BASE_URL}/vehicledetails/${v.id}`,
        toDateString(v.updatedAt) ?? toDateString(v.createdAt),
        "weekly",
        "0.8"
      )
    ),
    ...bikes.map((v) =>
      urlEntry(
        `${BASE_URL}/bikedetails/${v.id}`,
        toDateString(v.updatedAt) ?? toDateString(v.createdAt),
        "weekly",
        "0.8"
      )
    ),
    ...trucks.map((v) =>
      urlEntry(
        `${BASE_URL}/truckdetails/${v.id}`,
        toDateString(v.updatedAt) ?? toDateString(v.createdAt),
        "weekly",
        "0.8"
      )
    ),
    ...machines.map((v) =>
      urlEntry(
        `${BASE_URL}/machinedetails/${v.id}`,
        toDateString(v.updatedAt) ?? toDateString(v.createdAt),
        "weekly",
        "0.8"
      )
    ),
    ...parts.map((v) =>
      urlEntry(
        `${BASE_URL}/partdetails/${v.id}`,
        toDateString(v.updatedAt) ?? toDateString(v.createdAt),
        "weekly",
        "0.7"
      )
    ),
  ];

  const xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${[...staticEntries, ...dynamicEntries].join("\n")}
</urlset>`;

  return new Response(xml, {
    headers: {
      "Content-Type": "application/xml; charset=utf-8",
      "Cache-Control": "public, max-age=3600",
    },
  });
}

