import { routes } from '@/config/routes'
import { apiEndpoints } from '@/server_api/config/api.endpoints'
import { fetchAPIData } from '@/src/server_api/api-functions/api-fetch-fetch'
import {
    SitemapBrandListProps,
    SitemapEntry,
} from '@/types/sitemap/sitemap-types'
import { generateSitemapXml } from '@/utils/seo/seo-utils'

export const dynamic = 'force-dynamic'

export async function GET(): Promise<Response> {
    const baseUrl = process.env.NEXT_PUBLIC_APP_BASE_URL || 'https://dynatech.ae'

    try {
        const response = await fetchAPIData({ getAllCategory: '1' }, apiEndpoints.products.categories)
        const categoryUrls: SitemapEntry[] =
            response?.requestedData
                ?.map((category: SitemapBrandListProps) => {
                    if (!category) return null
                    return {
                        url: `${baseUrl}${routes.productList(encodeURIComponent(category?.slug))}`,
                        priority: 0.8,
                    }
                })
                .filter(Boolean) || []

        const sitemapXml = generateSitemapXml(categoryUrls)

        return new Response(sitemapXml, {
            headers: {
                'Content-Type': 'application/xml',
            },
        })
    } catch (error: any) {
        console.error('Error generating sitemap:', error)

        if (error.isAxiosError) {
            console.error('AxiosError details:', error.message)
            console.error('Request config:', error.config)
            console.error('Response data:', error.response?.data)
            console.error('Response status:', error.response?.status)
        }

        return new Response(
            generateSitemapXml([
                { url: baseUrl, lastModified: new Date(), priority: 1 },
            ]),
            {
                headers: {
                    'Content-Type': 'application/xml',
                },
            },
        )
    }
}
