<?php

namespace App\Controller;

use App\Entity\Player;
use App\Service\TiebreakerService;
use Sonata\AdminBundle\Controller\CRUDController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class GradingGroupAdminController extends CRUDController
{
    private $tiebreakerService;

    public function __construct(TiebreakerService $tiebreakerService)
    {
        $this->tiebreakerService = $tiebreakerService;
    }
    public function reportAction($id)
    {
        $object = $this->admin->getSubject();

        if (!$object) {
            throw new NotFoundHttpException(sprintf('unable to find the object with id: %s', $id));
        }

        // download CSV goes here
        $FileName = $object->getName() . '.csv';
        $report = $this->groupReport($object);
        $Content = "";

        # Titlte of the CSV
                $Content = "Rank,Name,Club name,Score
        ";

        # fill data in the CSV
                $Content .= $report;

        header('Content-Type: application/csv;charset=UTF-8');
        header('Content-Disposition: attachment; filename="' . $FileName . '"');
        echo $Content;
        exit();

    }

    private function groupReport($ggroup)
    {
        $content = "";
        $players = array_filter(
            $ggroup->getPlayers()->toArray(),
            function ($player) {
                return ($player->getStatus() == Player::STATUS_COMPLETED);
            }
        );
        $players = array_values($players);
        if(count($players) > 0 ) {
            usort($players, function ($a, $b) { return ($a->totalTech - $b->totalTech) >=0 ? -1 : 1;});
        }
        if(count($players) > 0) {
            foreach ($players as $i =>$player){
                $k = $i+1;
                /** @var Player $player */
                $content .= $k.','.implode(',', $player->reportArray()). "\n\r";
            }
        }
        return$content;
    }

    public function rankingAction($id)
    {
        $object = $this->admin->getSubject();

        if (!$object) {
            throw new NotFoundHttpException(sprintf('unable to find the object with id: %s', $id));
        }
        $this->tiebreakerService->generateRanksForGroup($object);
        
        $this->addFlash('sonata_flash_success', 'Generated Ranking order successfully');

        return new RedirectResponse($this->admin->generateUrl('list'));
    }

    public function promote8Action($id)
    {
        $object = $this->admin->getSubject();

        if (!$object) {
            throw new NotFoundHttpException(sprintf('unable to find the object with id: %s', $id));
        }
        // promote first 8 members to next level
        $leveledupGroup = $this->tiebreakerService->createNextLevelGroupof8($object);

        $this->addFlash('sonata_flash_success', 'Next level Group created successfully');

        return new RedirectResponse($this->admin->generateUrl('list'));
    }
}
