<?php
namespace App\Admin;

use App\Entity\User;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\AdminBundle\Show\ShowMapper;
use Symfony\Component\Form\Extension\Core\Type\TextType;

final class GradingGroupAdmin extends AbstractAdmin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $em = $this->modelManager->getEntityManager('App\Entity\User');

        $query = $em->createQueryBuilder('c')
            ->select('c')
            ->from('App:User', 'c')
            ->where('c.name = "test"');

//        $formMapper->with('Grading group Judges');
//        $formMapper->add('judges1', 'sonata_type_model', array(
//        'required' => true,
//        'query' => $query
//        ));
//        $formMapper->end();

        $formMapper->with('Grading group'); //, ['class' => 'col-md-4']
            $formMapper->add('name', TextType::class);
            $formMapper->add('tatami', TextType::class);
            $formMapper->add('status','choice',array('choices' =>[
                'pending'  => 'pending',
                'playing'  => 'playing',
                'finished'  => 'finished',
                'completed'=> 'completed'
            ]));
        $formMapper->end();

        $formMapper->with('Grading group Judges'); //, ['class' => 'col-md-4']
            $formMapper->add('users', 'sonata_type_model', [
                'multiple'              => true,
                'expanded'              => true,     // or false
                'class'                 => User::class,
                'property'              => 'name',   // or any field in your media entity
                'label'                 => 'Judges',
                'btn_add'               => true,
                'btn_list'              => false,
                'btn_delete'            => true,
    //            'btn_catalogue'         => 'admin',   // or your own translate catalogue in my case file admin.en.yml
            ]);
        $formMapper->end();
    }

    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
        $datagridMapper->add('name');
        $datagridMapper->add('players.student');
        $datagridMapper->add('users', null, ['field_name' => 'Judges']);
        $datagridMapper->add('status');
    }

    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper->addIdentifier('name');
        $listMapper->addIdentifier('players');
        $listMapper->addIdentifier('users');
        $listMapper->addIdentifier('status');
        $listMapper->add('_action', null, [
            'actions' => [
                'edit' => [],
                'report' => [
                    'template' => 'SonataAdmin/CRUD/GGroup/list__action_report.html.twig',
                ],
                'ranking' => [
                    'template' => 'SonataAdmin/CRUD/GGroup/list__action_ranking.html.twig',
                ],
                'promote8' => [
                    'template' => 'SonataAdmin/CRUD/GGroup/list__action_promote8.html.twig',
                ],
            ]
        ]);
    }

    protected function configureShowFields(ShowMapper $showMapper)
    {
        $showMapper->add('name');
        $showMapper->add('players');
        $showMapper->add('users');
    }

    protected function configureRoutes(RouteCollection $collection)
    {
        $collection
            ->add('Report', $this->getRouterIdParameter().'/report')
            ->add('Ranking', $this->getRouterIdParameter().'/ranking')
            ->add('Promote-8', $this->getRouterIdParameter().'/promote8')
            ;
    }
}
