import { NextResponse } from 'next/server';
import { productService } from '../../lib/services/productService';
import { PRODUCTS } from '../../lib/data/products';
export const dynamic = 'force-dynamic';
export const revalidate = 3600; // Revalidate every hour
export async function GET() {
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://canina.ir';
let productsList: any[] = [];
try {
const res = await productService.getProducts({ limit: 999 });
productsList = res.data && res.data.length > 0 ? res.data : PRODUCTS;
} catch {
productsList = PRODUCTS;
}
// Filter out noIndex products
const indexableProducts = productsList.filter(p => !p.noIndex);
const urlsXml = indexableProducts.map(product => {
const slug = product.slug || product.artNo || product.id;
const loc = `${baseUrl}/shop/${slug}`;
const lastmod = product.updatedAt ? new Date(product.updatedAt).toISOString() : new Date().toISOString();
const primaryImg = product.ogImage || product.image;
const title = product.nameFa || product.name || 'مکمل درمانی کنینا';
const imageTag = primaryImg ? `
${primaryImg.startsWith('http') ? primaryImg : `${baseUrl}${primaryImg}`}
` : '';
return `
${loc}
${lastmod}
daily
0.9${imageTag}
`;
}).join('\n');
const xmlContent = `
${urlsXml}
`;
return new NextResponse(xmlContent, {
status: 200,
headers: {
'Content-Type': 'application/xml; charset=utf-8',
'Cache-Control': 'public, max-age=3600, s-maxage=3600, stale-while-revalidate=86400',
},
});
}