import axios from "axios";
import { baseUrl } from "../../../../constants/urls";
import { NextApiRequest, NextApiResponse } from "next";
import { create } from 'xmlbuilder2';

async function fetchProductData(page: number) {
    try {
      const response = await axios.get(`${baseUrl}/api/generate-sitemap?type=products-list&page=${page}`);
      return response.data?.data?.data ?? [];
    } catch (error) {
      console.error('Error fetching product data:', error);
      return [];
    }
  }
  
  const ITEMS_PER_BATCH = 10; // Number of pages to process in each batch
  
  export default async function handler(req: NextApiRequest, res: NextApiResponse) {

    const {idx } = req.query; // Get the page number from the URL
  
    const pageNumber = parseInt(idx as string, 10) || 1;
  
    const startPage = (pageNumber - 1) * ITEMS_PER_BATCH + 1;
    const endPage = pageNumber * ITEMS_PER_BATCH;

    const sitemap = create({ version: '1.0', encoding: 'UTF-8' });
    const root = sitemap.ele('urlset', { xmlns: 'http://www.sitemaps.org/schemas/sitemap/0.9' });
  
    for (let i = startPage; i <= endPage; i++) {
      const products = await fetchProductData(i);
  
      products.forEach((product: any) => {
        const productUrl = product.product_url;
        const lastModified = new Date().toISOString();
        const priority = '0.8';
  
        root.ele('url')
          .ele('loc').txt(productUrl).up()
          .ele('lastmod').txt(lastModified).up()
          .ele('priority').txt(priority);
      });
    }
  
    const xmlString = sitemap.end({ prettyPrint: true });
  
    // Set header and return the XML response
    res.setHeader('Content-Type', 'text/xml');
    res.status(200).send(xmlString);
  }
