<?php

namespace App\Command;

use App\Entity\Tweet;
use App\Service\TweetFetcher;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;

class FetchTweetsCommand extends Command
{
    protected static $defaultName = 'app:fetch-tweets';

    /**
     * @var \App\Service\TweetFetcher
     */
    private $tweetFetcher;

    public function __construct(TweetFetcher $tweetFetcher)
    {
        parent::__construct();

        $this->tweetFetcher = $tweetFetcher;
    }

    protected function configure()
    {
        $this
            ->setDescription('Add a short description for your command')
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $io = new SymfonyStyle($input, $output);

        $io->table(
          ['Tweet', 'Author', 'Created', 'ID'],
          $this->tweetFetcher->getTweets()->map(function (Tweet $tweet) {
              return [
                  $tweet->getText(),
                  $tweet->getAuthor(),
                  $tweet->getCreated(),
                  $tweet->getId(),
              ];
          })->all()
        );
    }
}