import type { APIRoute } from 'astro'
import { getDb, type Casino, type Article, type Category } from '../lib/db'

const siteUrl = 'https://casinoguidese.com'

function url(path: string, priority: string, changefreq: string): string {
  return `<url><loc>${siteUrl}${path}</loc><changefreq>${changefreq}</changefreq><priority>${priority}</priority></url>`
}

export const GET: APIRoute = () => {
  const db = getDb()
  const casinos = db.prepare('SELECT slug FROM casinos WHERE active = 1').all() as { slug: string }[]
  const articles = db.prepare('SELECT slug FROM articles WHERE published = 1').all() as { slug: string }[]
  const categories = db.prepare('SELECT slug FROM categories WHERE active = 1').all() as { slug: string }[]

  const staticPages = [
    url('/', '1.0', 'daily'),
    url('/kasino/', '0.9', 'daily'),
    url('/bonus/', '0.8', 'weekly'),
    url('/bonus/ingen-insattning/', '0.8', 'weekly'),
    url('/bonus/free-spins/', '0.8', 'weekly'),
    url('/bonus/valkombonusar/', '0.8', 'weekly'),
    url('/kategorier/', '0.7', 'weekly'),
    url('/spel/spelautomater/', '0.7', 'weekly'),
    url('/spel/live-kasino-spel/', '0.7', 'weekly'),
    url('/spel/roulette/', '0.7', 'weekly'),
    url('/spel/blackjack/', '0.7', 'weekly'),
    url('/betalmetoder/trustly/', '0.8', 'monthly'),
    url('/betalmetoder/swish/', '0.7', 'monthly'),
    url('/betalmetoder/bankkort/', '0.7', 'monthly'),
    url('/ansvarigt-spelande/', '0.6', 'monthly'),
    url('/om-oss/', '0.4', 'monthly'),
    url('/blogg/', '0.7', 'weekly'),
  ]

  const casinoPages = casinos.map(c => url(`/kasino/${c.slug}/`, '0.7', 'weekly'))
  const categoryPages = categories.map(c => url(`/kategorier/${c.slug}/`, '0.8', 'weekly'))
  const blogPages = articles.map(a => url(`/blogg/${a.slug}/`, '0.6', 'monthly'))

  const allUrls = [...staticPages, ...casinoPages, ...categoryPages, ...blogPages].join('\n  ')

  const xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  ${allUrls}
</urlset>`

  return new Response(xml, {
    headers: { 'Content-Type': 'application/xml; charset=utf-8' },
  })
}
