<?php

namespace App\Form;

use App\Entity\Ministry;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\ColorType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;

class MinistryType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('code', TextType::class, [
                'label' => 'basics.code'
            ])
            ->add('name', TextType::class, [
                'label' => 'basics.name'
            ])
            ->add('description', TextareaType::class, [
                'label' => 'Description',
                'required' => false,
            ])
            ->add('mtype', ChoiceType::class, [
                'label' => 'ministry.type',
                'choices' => [
                    'basics.operation' => 'operation',
                    'basics.strategie' => 'strategie',
                    ],
                'placeholder' => '',
            ])
            ->add('grouping', ChoiceType::class, [
                'label' => 'ministry.commune.grouping',
                'choices' => [
                    'basics.department' => 'department',
                    'basics.pole' => 'pole',
                    'basics.zone' => 'zone',
                    ],
                'placeholder' => '',
                'required' => true,
            ])
            ->add('color', ColorType::class, [
                'label' => 'basics.color',
            ])
            ->add('poste', CheckboxType::class, [
                'label' => 'basics.poste',
                'required' => false
            ])
        ;

        $builder->addEventListener(
            FormEvents::PRE_SET_DATA,
            function (FormEvent $event) use ($options) {

                $form = $event->getForm();
                $ministry = $event->getData();

                if (!empty($options['editable_years'])) {
                    $data = array_filter($ministry->getYears(), function ($year) use ($options) {
                        return in_array($year, $options['editable_years']);
                    });
                    $choices = array_combine($options['editable_years'], $options['editable_years']);
                    $event->getForm()->add('years', ChoiceType::class, [
                        'label' => 'form.ministry.years.label',
                        // Use mapped = false for security reasons
                        'mapped' => false,
                        'choices' => $choices,
                        'choice_label' => function ($value, $key, $index) {
                            return $key;
                        },
                        'expanded' => true,
                        'multiple' => true,
                        'data' => $data
                    ]);
                }
            }
        ); 
    
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => Ministry::class,
            'editable_years' => []
        ));
    }
}
