import { MetadataRoute } from 'next';
import { headers } from 'next/headers';
import { getCategories } from '@/lib/data';
import fs from 'fs';
import path from 'path';

export const dynamic = 'force-dynamic';

type RobotsTxtConfig = {
  userAgent?: string | string[];
  allow?: string | string[];
  disallow?: string | string[];
};

type SiteConfigFile = {
  robotsTxt?: RobotsTxtConfig;
  blockedBots?: string[];
};

export default async function robots(): Promise<MetadataRoute.Robots> {
  const headersList = await headers();
  const domain = headersList.get('host') || 'localhost:3000';
  const protocol = domain.includes('localhost') ? 'http' : 'https';
  const baseUrl = `${protocol}://${domain}`;

  // Ambil semua kategori untuk didaftarkan sitemap-nya satu per satu
  const categories = await getCategories();
  const sitemapUrls = categories.map(cat => `${baseUrl}/sitemaps/${cat}.xml`);

  // Baca konfigurasi robotsTxt dan blockedBots dari site_config.json secara dinamis
  let robotsTxtConfig: RobotsTxtConfig = {
    userAgent: '*',
    allow: '/',
    disallow: ['/agc-sitemaps'],
  };
  let blockedBots: string[] = [];

  try {
    const configPath = path.join(process.cwd(), 'site_config.json');
    if (fs.existsSync(configPath)) {
      const configData = fs.readFileSync(configPath, 'utf8');
      const parsedConfig = JSON.parse(configData) as SiteConfigFile;
      if (parsedConfig.robotsTxt) {
        robotsTxtConfig = parsedConfig.robotsTxt;
      }
      if (Array.isArray(parsedConfig.blockedBots) && parsedConfig.blockedBots.length > 0) {
        blockedBots = parsedConfig.blockedBots;
      }
    }
  } catch (error) {
    console.error('Failed to read config from site_config.json:', error);
  }

  const rules: MetadataRoute.Robots['rules'] = [
    {
      userAgent: robotsTxtConfig.userAgent || '*',
      allow: robotsTxtConfig.allow || '/',
      disallow: robotsTxtConfig.disallow || ['/agc-sitemaps'],
    }
  ];

  if (blockedBots.length > 0) {
    rules.push({
      userAgent: blockedBots,
      disallow: ['/'],
    });
  }

  return {
    rules,
    sitemap: sitemapUrls, // Daftarkan semua index sitemap per kategori di sini
  };
}
