<?php

namespace App\Controller;

use App\Entity\Player;
use App\Service\TiebreakerService;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;

class PlayerController extends Controller
{
    private $tiebreakerService;

    public function __construct(TiebreakerService $tiebreakerService)
    {
        $this->tiebreakerService = $tiebreakerService;
    }

    /**
     * @Route("/player/{player}/start", name="playerStart")
     */
    public function start(Player $player)
    {
        if(!$this->isPlayinPlayerExistsInTheGroup($player->getGgroup())) {
            $player->setStatus(Player::STATUS_PLAYING);
            $em = $this->getDoctrine()->getManager();
            $em->persist($player);
            $em->flush();

            $finishedPlayer = $em->getRepository(Player::class)->findOneBy([
                'status' => Player::STATUS_FINISHED,
                'ggroup' => $player->getGgroup()->getId()
            ]);

            if($finishedPlayer instanceof Player) {
                $finishedPlayer->setStatus(Player::STATUS_COMPLETED);
                $em->persist($finishedPlayer);
                $em->flush();
                $this->tiebreakerService->generateRanksForGroup($player->getGgroup());
            }

            $this->addFlash(
                'info',
                'Player status changed. He can start the game.'
            );
        }
        return $this->redirect('/group/'.$player->getGgroup()->getId());
    }

    private function isPlayinPlayerExistsInTheGroup($group) {
        $players = array_filter($group->getPlayers()->toArray(), function($player) {
            return $player->getStatus() === Player::STATUS_PLAYING;
        });

        return count($players) > 0;
    }

    /**
     * @Route("/player/{player}/details", name="playerDetails")
     */
    public function details(Player $player)
    {
        return $this->render('player/details.html.twig', [
            'player' => $player,
        ]);
    }
}
