<?php
declare(strict_types=1);

namespace Autogedal\BlackFriday\Console\Command;

use Autogedal\BlackFriday\Model\LaunchMailer;
use Magento\Framework\App\Area;
use Magento\Framework\App\State;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

/** Manual run of the launch email batch (the cron does the same every 5 minutes). */
class SendLaunchEmails extends Command
{
    public function __construct(private readonly LaunchMailer $mailer, private readonly State $state)
    {
        parent::__construct();
    }

    protected function configure(): void
    {
        $this->setName('autogedal:blackfriday:send-launch-emails')
            ->setDescription('Trimite emailul de lansare Black Friday abonatilor cu favorite (doar in perioada campaniei)')
            ->addOption('limit', null, InputOption::VALUE_REQUIRED, 'Cate emailuri sa trimita');
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        try {
            $this->state->setAreaCode(Area::AREA_CRONTAB);
        } catch (\Throwable) {
            // area already set
        }
        $limit = $input->getOption('limit') !== null ? (int)$input->getOption('limit') : null;
        $result = $this->mailer->sendPending($limit);
        $output->writeln($result['skipped'] !== ''
            ? 'Nu am trimis nimic: ' . $result['skipped']
            : sprintf('Trimise: %d, erori: %d', $result['sent'], $result['errors']));
        return Command::SUCCESS;
    }
}
