<?php

declare(strict_types=1);

namespace Fennec\Console\Command;

use Fennec\Clock\ClockInterface;
use Fennec\Console\CommandInterface;
use Fennec\Console\ConsoleOutput;
use Fennec\Console\Input;

/**
 * Supprime les fichiers de log plus anciens que N jours (--days=30 par défaut).
 *
 * Pas de purge automatique en Phase 1 (§4.9) : cette commande laisse la main
 * à l'utilisateur plutôt que de supprimer silencieusement via un cron.
 */
final class LogCleanCommand implements CommandInterface
{
    private const int DEFAULT_DAYS = 30;

    public function __construct(
        private readonly ConsoleOutput $output,
        private readonly ClockInterface $clock,
        private readonly string $logDirectory,
    ) {
    }

    public function getName(): string
    {
        return 'log:clean';
    }

    public function getDescription(): string
    {
        return 'Supprime les fichiers de log plus anciens que N jours (--days=30 par défaut).';
    }

    public function execute(array $arguments): int
    {
        $input = new Input($arguments);
        $days = (int) ($input->getOption('days', (string) self::DEFAULT_DAYS));

        $threshold = $this->clock->now()->modify(\sprintf('-%d days', $days))->getTimestamp();
        $deletedCount = 0;

        foreach (\glob($this->logDirectory . '/app-*.log') ?: [] as $filePath) {
            $modifiedAt = \filemtime($filePath);

            if ($modifiedAt !== false && $modifiedAt < $threshold) {
                \unlink($filePath);
                $deletedCount++;
            }
        }

        $this->output->success(\sprintf('%d fichier(s) de log supprimé(s).', $deletedCount));

        return 0;
    }
}
