import type { MetadataRoute } from "next";
import { getPublicSiteUrl } from "@/lib/mail-urls";
import { getPublishedMarketingBlogPosts } from "@/lib/marketing-blog";
import { seoPages } from "@/lib/seo-pages";

export const dynamic = "force-dynamic";

function absoluteUrl(path: string) {
  return new URL(path, getPublicSiteUrl()).toString();
}

const lastContentUpdate = new Date("2026-07-22T00:00:00+09:00");

function sitemapEntry(
  path: string,
  priority: number,
  changeFrequency: MetadataRoute.Sitemap[number]["changeFrequency"],
  lastModified = lastContentUpdate,
) {
  const url = absoluteUrl(path);

  return {
    url,
    lastModified,
    changeFrequency,
    priority,
    alternates: {
      languages: {
        "ko-KR": url,
        "x-default": url,
      },
    },
  };
}

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const blogPosts = await getPublishedMarketingBlogPosts();
  const staticPages = [
    { path: "/", priority: 1 },
    { path: "/guide", priority: 0.9 },
    { path: "/blog", priority: 0.9 },
    { path: "/terms", priority: 0.35 },
    { path: "/privacy", priority: 0.35 },
  ];

  return [
    ...staticPages.map((page) =>
      sitemapEntry(page.path, page.priority, "monthly"),
    ),
    ...seoPages.map((page) =>
      sitemapEntry(
        `/${page.slug}`,
        page.slug === "business-email" ? 0.95 : 0.85,
        "weekly",
      ),
    ),
    ...blogPosts.map((post) =>
      sitemapEntry(
        `/blog/${post.slug}`,
        0.8,
        "monthly",
        new Date(post.updatedAt),
      ),
    ),
  ];
}
