<?php

namespace App\Form;

use App\Entity\Commune;
use App\Entity\Department;
use App\Entity\Goal;
use App\Entity\Pole;
use App\Entity\Target;
use App\Entity\Zone;
use App\Repository\TargetRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Doctrine\ORM\Query\Expr;

class CommuneType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, [
                'label' => 'basics.name'
                ])
            ->add('code', TextType::class, [
                'label' => 'basics.code'
                ])
            ->add('department', EntityType::class, [
                'class' => Department::class,
                'choice_label' => 'name',
                'placeholder' => 'basics.department.placeholder',
                'label' => 'basics.department'
            ])
            ->add('pole', EntityType::class, [
                'class' => Pole::class,
                'choice_label' => 'name',
                'placeholder' => 'basics.pole.placeholder',
                'label' => 'basics.pole'
            ])
            ->add('zone', EntityType::class, [
                'class' => Zone::class,
                'placeholder' => 'basics.zone.placeholder',
                'choice_label' => 'name',
                'label' => 'basics.zone'
            ])
            ->add('description', TextareaType::class, [
                'label' => 'Description',
                'required' => false,
                ])
            ->add('cibles', EntityType::class, [
                'class'=> Target::class,
                'query_builder' => function(TargetRepository $items) {
                    return $items ->createQueryBuilder('t')
                                  ->innerJoin(Goal::class, 'g', Expr\Join::WITH, 'g.id = t.goal')
                                  ->where('g.agenda = :agenda')
                                  ->setParameter('agenda', 2030);
                },
                'label' => 'basics.targetspa',
                'multiple'=>true,
                'attr'=>[
                    'class'=>'form-control select2',
                ]
            ])
        ;

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => Commune::class
        ));
    }
}
