import { listPosts } from "@/lib/cms";
import { settingValue } from "@/lib/settings";

export const dynamic = "force-dynamic";

function escape(s: string): string {
  return s
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&apos;");
}

export async function GET() {
  const siteUrl = (await settingValue("site.url")) ?? "https://v2.finzone.io.vn";
  const siteTitle = (await settingValue("site.title")) ?? "Finzone Network";
  const siteDesc =
    (await settingValue("site.description")) ??
    "Tin tức và phân tích tài chính, crypto, chứng khoán, vàng";

  const { posts } = await listPosts({ page: 1, perPage: 30 });

  const items = posts
    .map((p) => {
      const url = `${siteUrl}/${p.slug}`;
      const date = new Date(p.date).toUTCString();
      const cat = p.categories[0]?.name;
      return `    <item>
      <title>${escape(p.title)}</title>
      <link>${url}</link>
      <guid isPermaLink="true">${url}</guid>
      <pubDate>${date}</pubDate>${cat ? `\n      <category>${escape(cat)}</category>` : ""}${
        p.excerpt ? `\n      <description>${escape(p.excerpt)}</description>` : ""
      }
    </item>`;
    })
    .join("\n");

  const xml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>${escape(siteTitle)}</title>
    <link>${siteUrl}</link>
    <description>${escape(siteDesc)}</description>
    <language>vi-VN</language>
    <lastBuildDate>${new Date().toUTCString()}</lastBuildDate>
    <atom:link href="${siteUrl}/feed.xml" rel="self" type="application/rss+xml" />
${items}
  </channel>
</rss>`;

  return new Response(xml, {
    headers: {
      "content-type": "application/rss+xml; charset=utf-8",
      "cache-control": "public, max-age=600, s-maxage=600",
    },
  });
}
