import { SitemapStream, streamToPromise } from 'sitemap';
import { Readable } from 'stream';
import { writeFileSync } from 'fs';
import axios from "axios";

async function generateSitemap() {

    const API_URL = 'http://localhost:5000';

    async function fetchArticlePaths() {
        try {
            const response = await axios.get(`${API_URL}/api/articles/sitemap/`);
            return response.data.articles;
        } catch (error) {
            console.error('Ошибка при получении путей статей:', error.message);
            return [];
        }
    }

    const baseUrl = 'https://russcult.anibilag.ru'; // Replace with your actual domain

    // Create a stream to write to
    const stream = new SitemapStream({ hostname: baseUrl });

    // Add static routes
    const staticRoutes = [
        { url: '/', changefreq: 'daily', priority: 1.0 },
        { url: '/search', changefreq: 'weekly', priority: 0.8 },
    ];

    const articles = await fetchArticlePaths();

    // Add dynamic article routes
    const articleRoutes = articles.map(article => ({
        url: `/article/${article.id}`,
        changefreq: 'weekly',
        priority: 0.7,
        lastmod: article.publishedAt
    }));

    // Add category routes
    const categories = ['Film', 'Theater', 'Music', 'Sports', 'Art', 'Legends', 'Anniversaries', 'Memory'];
    const categoryRoutes = categories.map(category => ({
        url: `/?category=${category}`,
        changefreq: 'daily',
        priority: 0.9
    }));

    // Combine all routes
    const links = [...staticRoutes, ...articleRoutes, ...categoryRoutes];

    // Create sitemap from routes
    const sitemap = await streamToPromise(
        Readable.from(links).pipe(stream)
    ).then(data => data.toString());

    // Write sitemap to public directory
    writeFileSync('./public/sitemap.xml', sitemap);
    console.log('Sitemap generated successfully!');
}

generateSitemap().catch(console.error);