<?php

namespace App\Command;

use App\Repository\ScanSessionRepository;
use App\Twig\AppExtension;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

/**
 * Vérifie le rendu d'URL d'image d'une session via le MÊME code que le template
 * (AppExtension::imageUrl), en lisant ScanSession.s3Prefix réel :
 *   php bin/console app:s3:check <sessionId>
 * Affiche la 1re URL d'image résolue (S3 pré-signée si la session est migrée).
 */
#[AsCommand(name: 'app:s3:check', description: 'Affiche l\'URL d\'image résolue (image_url) de la 1re photo d\'une session')]
final class S3CheckCommand extends Command
{
    public function __construct(
        private readonly ScanSessionRepository $sessions,
        private readonly AppExtension $ext,
    ) {
        parent::__construct();
    }

    protected function configure(): void
    {
        $this->addArgument('sessionId', InputArgument::REQUIRED, 'UUID de la session');
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $session = $this->sessions->findOneById((string) $input->getArgument('sessionId'));
        if (null === $session) {
            $output->writeln('session introuvable');

            return Command::FAILURE;
        }
        $output->writeln('s3Prefix = ' . ($session->getS3Prefix() ?? '(null → stockage local)'));
        foreach ($session->getResults() as $r) {
            if (!\is_array($r)) {
                continue;
            }
            foreach (['plateImageId' => 'plateS3Key', 'vinImageId' => 'vinS3Key'] as $idField => $keyField) {
                $imageId = $r[$idField] ?? null;
                if (\is_string($imageId) && '' !== $imageId) {
                    $url = $this->ext->imageUrl($session, $imageId, $r[$keyField] ?? null);
                    $output->writeln($url);

                    return Command::SUCCESS;
                }
            }
        }
        $output->writeln('(aucune image dans cette session)');

        return Command::SUCCESS;
    }
}
