<?php

declare(strict_types=1);

namespace App\Command;

use Presta\SitemapBundle\Service\DumperInterface;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\HttpKernel\KernelInterface;

#[AsCommand(name: 'app:sitemap', description: 'Dumps sitemaps to given location')]
class SitemapCommand extends Command
{
    public function __construct(
        private readonly KernelInterface $kernel,
        private readonly DumperInterface $dumper,
        ?string $name = null
    ) {
        parent::__construct($name);
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $targetDir = $this->kernel->getProjectDir() . "/public/seo";

        // 1. Suppression des anciens fichiers XML
        if (is_dir($targetDir)) {
            $files = glob($targetDir . '/*.xml'); // Récupère tous les fichiers .xml
            foreach ($files as $file) {
                if (is_file($file)) {
                    unlink($file);
                }
            }
            $io->info('Anciens fichiers sitemap supprimés.');
        } else {
            // Crée le dossier s'il n'existe pas
            mkdir($targetDir, 0775, true);
        }

        // 2. Génération du sitemap (Dump)
        $baseUrl = rtrim($_ENV['DEFAULT_URI'], '/') . "/seo";

        $io->comment('Génération du sitemap...');
        $this->dumper->dump($targetDir, $baseUrl, "", []);

        $io->success('Sitemap généré avec succès dans : ' . $targetDir);

        return Command::SUCCESS;
    }
}
