<?php

declare(strict_types=1);

namespace App\Command;

use App\Domain\Shared\Domain\Contract\NotificationInterface;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

#[AsCommand(
    name: 'app:notify:test',
    description: 'Envoie une notification de test via Mercure (utile en dev/prod pour vérifier le système)',
)]
class SendTestNotificationCommand extends Command
{
    public function __construct(
        private readonly NotificationInterface $notification
    ) {
        parent::__construct();
    }

    protected function configure(): void
    {
        $this
            ->addOption('type', 't', InputOption::VALUE_REQUIRED, 'Type de notification : info, success, error, warning', 'info')
            ->addOption('message', 'm', InputOption::VALUE_REQUIRED, 'Message à envoyer', 'Notification de test depuis Mangarr');
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $type = $input->getOption('type');
        $message = $input->getOption('message');

        $allowed = ['info', 'success', 'error', 'warning'];
        if (!in_array($type, $allowed, true)) {
            $output->writeln(sprintf('<error>Type invalide "%s". Valeurs acceptées : %s</error>', $type, implode(', ', $allowed)));
            return Command::FAILURE;
        }

        match ($type) {
            'success' => $this->notification->sendSuccess($message),
            'error'   => $this->notification->sendError($message),
            'warning' => $this->notification->sendWarning($message),
            default   => $this->notification->sendInfo($message),
        };

        $output->writeln(sprintf('<info>[%s] Notification envoyée : %s</info>', strtoupper($type), $message));

        return Command::SUCCESS;
    }
}
