<?php

namespace App\Command;

use App\Service\Media\VideoThumbnailer;
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\DependencyInjection\ParameterBag\ParameterBagInterface;

#[AsCommand(
    name: 'app:generate-video-thumbs',
    description: 'Génère une miniature JPG à partir d’une liste de vidéos.',
)]
class GenerateVideoThumbsCommand extends Command
{
    // Liste des vidéos (relatif à /public)
    private const VIDEOS_TO_THUMB = [
        'provider/video/video.mp4',
    ];

    public function __construct(
        private readonly ParameterBagInterface $parameterBag,
        private readonly VideoThumbnailer $videoThumbnailer
    ) {
        parent::__construct();
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $publicPath = $this->parameterBag->get('kernel.project_dir') . '/public/';

        $io->title('Extraction des miniatures Vidéo');

        foreach (self::VIDEOS_TO_THUMB as $relativeVideoPath) {
            $videoFile = $publicPath . $relativeVideoPath;

            if (!file_exists($videoFile)) {
                $io->warning("Vidéo introuvable : $videoFile");
                continue;
            }

            // Définition du nom de sortie (ex: video.mp4 -> video.jpg)
            $pathInfo = pathinfo($videoFile);
            $thumbName = $pathInfo['filename'] . '.jpg';
            $thumbPath = $pathInfo['dirname'] . '/' . $thumbName;

            $io->writeln("Traitement de : " . $pathInfo['basename']);

            try {
                $this->videoThumbnailer->generateThumbnail($videoFile, $thumbPath);
                $io->writeln("<info>[OK]</info> Miniature générée : $thumbName");
            } catch (\RuntimeException $e) {
                $io->error("Erreur FFmpeg : " . $e->getMessage());
            }
        }

        $io->success('Toutes les vidéos ont été traitées.');

        return Command::SUCCESS;
    }
}
