<?php

namespace App\Form;

use App\Entity\Desagregation;
use App\Entity\Goal;
use App\Entity\Department;
use App\Entity\Commune;
use App\Entity\Modalite;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use App\Repository\GoalRepository;

class GoalOnlySelNewType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('desagregation', EntityType::class, [
                'label' => 'basics.desagregation',
                'class' => Desagregation::class,
                'choices' => $options['desagregations'],
                'attr' => [
                    'onchange' => 'this.form.submit()'
                ],
                'mapped' => false,
                'required' => true,
                'data' => $options['desagregation']
            ])
            ->add('modalite', ChoiceType::class, [
                'label' => 'basics.modalite',
                'choices'  => [],
                'placeholder' => 'basics.modalite.placeholder',
                'mapped' => false,
                'required' => false
            ])
        ;

        $builder->get('desagregation')->addEventListener(
            FormEvents::POST_SUBMIT,
            function (FormEvent $event) use($options) {
                $form = $event->getForm();
                $this->addModaliteField($form->getParent(), $form->getData(), $options);
            }
        );

        $builder->addEventListener(
            FormEvents::POST_SET_DATA,
            function (FormEvent $event) use($options) {
                $form = $event->getForm();
                $this->addModaliteField($form, $options['desagregation'], $options);
            }
        );
    }

    private function addModaliteField(FormInterface $form, ?Desagregation $desagregation, array $options)
    {
        //Désagrégations
        $national=1;
        $departement = 2;
        $commune=3;
        $zone=4;
        $sexe=5;
        
        if($desagregation){
            if($desagregation->getId()==$national){
                $form->add('modalite', ChoiceType::class, [
                    'label' => 'basics.modalite',
                    'choices'  => [],
                    'placeholder' => 'basics.modalite.placeholder',
                    'mapped' => false,
                    'required' => false
                ]);
            }
            if($desagregation->getId()==$departement){
                $form->add('modalite', EntityType::class, [
                    'label' => 'basics.department',
                    'class' => Department::class,
                    'placeholder' => 'basics.department.placeholder',
                    'attr' => [
                        'onchange' => 'this.form.submit()'
                    ],
                    'mapped' => false,
                    'required' => true,
                    'data' => $options['modalite']
                ]);
            }
            if($desagregation->getId()==$commune){
                $form->add('modalite', EntityType::class, [
                    'label' => 'basics.commune',
                    'class' => Commune::class,
                    'placeholder' => 'basics.commune.placeholder',
                    'attr' => [
                        'onchange' => 'this.form.submit()'
                    ],
                    'mapped' => false,
                    'required' => true,
                    'data' => $options['modalite']
                ]);
            }
            if($desagregation->getId()==$zone){
                $form->add('modalite', EntityType::class, [
                    'label' => 'basics.zone',
                    'class' => Zone::class,
                    'placeholder' => 'basics.zone.placeholder',
                    'attr' => [
                        'onchange' => 'this.form.submit()'
                    ],
                    'mapped' => false,
                    'required' => true,
                    'data' => $options['modalite']
                ]);
            }
            if($desagregation->getId()==$sexe){
                $form->add('modalite', ChoiceType::class, [
                    'label' => 'basics.sexe',
                    'choices'  => [
                        'Homme' => 1,
                        'Femme' => 2,
                    ],
                    'placeholder' => 'Sélectionnez un sexe',
                    'attr' => [
                        'onchange' => 'this.form.submit()'
                    ],
                    'mapped' => false,
                    'required' => true,
                    'data' => $options['modalite']
                ]);
            }
            if($desagregation->getId() > $sexe){
                $form->add('modalite', EntityType::class, [
                    'label' => 'basics.zone',
                    'class' => Modalite::class,
                    'placeholder' => 'Selectionnez '.$desagregation->getName(),
                    'choices'  => $desagregation->getModalites(),
                    'attr' => [
                        'onchange' => 'this.form.submit()'
                    ],
                    'mapped' => false,
                    'required' => true,
                    'data' => $options['modalite']
                ]);
            }
            
        }else{
            $form->add('modalite', ChoiceType::class, [
                'label' => 'basics.modalite',
                'choices'  => [],
                'placeholder' => 'basics.modalite.placeholder',
                'mapped' => false,
                'required' => false
            ]);
        }
        
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'goal' => null,
            'desagregation' => null,
            'modalite' => null,
            'desagregations' => null,
        ));
    }
}
