import rss from '@astrojs/rss'
import { SITE } from '@consts'
import type { APIContext } from 'astro'
import { getCollection } from 'astro:content'

export async function GET(context: APIContext) {
  try {
    const blog = (await getCollection('blog')).filter(
      (post) => !post.data.draft,
    )

    // Filter posts by tag 'rss-feed'
    const filteredBlogs = blog.filter(
      (post) => post.data.tags && post.data.tags.includes('rss-feed'),
    )

    // Sort posts by date
    const items = [...filteredBlogs].sort(
      (a, b) =>
        new Date(b.data.date).valueOf() - new Date(a.data.date).valueOf(),
    )

    // Return RSS feed
    return rss({
      title: SITE.TITLE,
      description: SITE.DESCRIPTION,
      site: context.site ?? SITE.SITEURL,
      items: items.map((item) => ({
        title: item.data.title,
        description: item.data.description,
        pubDate: item.data.date,
        link: `/${item.collection}/${item.slug}/`,
      })),
    })
  } catch (error) {
    console.error('Error generating RSS feed:', error)
    return new Response('Error generating RSS feed', { status: 500 })
  }
}
