import type { MetadataRoute } from "next"
import { LEGAL_PAGES } from "@/lib/legal"

const base = process.env.NEXT_PUBLIC_APP_URL ?? "https://propertymanagement.network"

type ChangeFrequency = MetadataRoute.Sitemap[number]["changeFrequency"]

// Single source of truth for the public, indexable URL surface. Every entry
// must resolve to a real 200 page that is NOT noindex'd. Private/app routes are
// blocked in app/robots.ts, and the /login and /forgot-password auth pages are
// noindex, so all three are intentionally omitted here. /signup is kept as a
// conversion landing page.
const PAGES: { path: string; changeFrequency: ChangeFrequency; priority: number }[] = [
  { path: "/", changeFrequency: "weekly", priority: 1 },
  { path: "/tenant-portal-info", changeFrequency: "monthly", priority: 0.8 },
  { path: "/api-docs", changeFrequency: "monthly", priority: 0.8 },
  { path: "/signup", changeFrequency: "monthly", priority: 0.7 },
  // Legal pages are derived from the shared LEGAL_PAGES constant (the same list
  // the footer renders) so the sitemap can never drift from the real routes.
  ...LEGAL_PAGES.map((page) => ({
    path: page.href,
    changeFrequency: "yearly" as const,
    priority: 0.3,
  })),
]

export default function sitemap(): MetadataRoute.Sitemap {
  // Build-time timestamp, refreshed on every deploy. We don't track per-page
  // modification dates, so a single honest "last built" date is used throughout.
  const lastModified = new Date()

  return PAGES.map(({ path, changeFrequency, priority }) => ({
    url: path === "/" ? base : `${base}${path}`,
    lastModified,
    changeFrequency,
    priority,
  }))
}
