<?php
/**
 * MetaTagPreset FormType
 *
 * @author Elze Kool <info@visualmedia.nl>
 */

namespace VisualM\TagManagerBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use VisualM\TagManagerBundle\Doctrine\FieldType\MetaType;
use VisualM\TagManagerBundle\Doctrine\FieldType\WijzigbaarType;

/**
 * MetaTagPreset FormType
 *
 * @author Elze Kool <info@visualmedia.nl>
 */
class MetaTagPresetType extends AbstractType
{

    /**
     * {@inheritDoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $wijzigbaar_choices = [
            WijzigbaarType::NIET => 'meta_tag_preset.wijzigbaar.niet',
            WijzigbaarType::BEPERKT => 'meta_tag_preset.wijzigbaar.beperkt',
            WijzigbaarType::VOLLEDIG => 'meta_tag_preset.wijzigbaar.volledig'
        ];

        $type_choices = [
            MetaType::META_TAG => 'meta_tag_base.meta_type.meta_tag',
            MetaType::HTML_HEADER_SNIPPET => 'meta_tag_base.meta_type.html_header_snippet',
            MetaType::HTML_BODY_SNIPPET => 'meta_tag_base.meta_type.html_body_snippet'
        ];

        $builder->add('titel', 'text', array('label' => 'meta_tag_preset.titel', 'trim' => true));
        $builder->add('naam', 'text', array('label' => 'meta_tag_preset.naam', 'trim' => true));

        $builder->add('type', 'choice', array(
            'choices' => $type_choices,
            'empty_value' => 'meta_tag_preset.type.empty',
            'label' => 'meta_tag_preset.type.label'
        ));

        $builder->add('zichtbaar', 'textarea', array('label' => 'meta_tag_preset.zichtbaar', 'attr' => [ 'rows' => 6, 'cols' => 100 ], 'required' => false));
        $builder->add('zichtbaarIsExpression', 'checkbox', array(
            'label'     => 'meta_tag_preset.zichtbaar_is_expression',
            'required'  => false
        ));
        $builder->add('zichtbaarWijzigbaar', 'choice', array(
            'choices' => $wijzigbaar_choices,
            'empty_value' => 'meta_tag_preset.zichtbaar_wijzigbaar.empty',
            'label' => 'meta_tag_preset.zichtbaar_wijzigbaar.label'
        ));
        
        $builder->add('inhoud', 'textarea', array('label' => 'meta_tag_preset.inhoud', 'attr' => [ 'rows' => 6, 'cols' => 100 ], 'required' => false));
        $builder->add('inhoudIsExpression', 'checkbox', array(
            'label'     => 'meta_tag_preset.inhoud_is_expression',
            'required'  => false
        ));
        $builder->add('inhoudWijzigbaar', 'choice', array(
            'choices' => $wijzigbaar_choices,
            'empty_value' => 'meta_tag_preset.inhoud_wijzigbaar.empty',
            'label' => 'meta_tag_preset.inhoud_wijzigbaar.label'
        ));

        // Add event listiner to set selectbox for zichtbaar
        $builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event) {
            $form = $event->getForm();
            $data = $event->getData();
            $zichtbaar_is_expression = $data === null ? false : $data->getZichtbaarIsExpression();
            $default = $zichtbaar_is_expression ? true : ($data === null ? true : ($data->getZichtbaar() == "0" ? false : true));
            $form->add('zichtbaarSelect', 'choice', array(
                'label' => 'meta_tag_preset.zichtbaar',
                'choices' => [ true => 'meta_tag_preset.zichtbaar_select.yes', false => 'meta_tag_preset.zichtbaar_select.no' ],
                'mapped' => false,
                'data' => $default
            ));
        });

        // Add event listener to load selectbox for zichtbaar
        $builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) {
            $form = $event->getForm();
            $data = $event->getData();
            if ($data->getZichtbaarIsExpression() == false) {
                $data->setZichtbaar($form->get('zichtbaarSelect')->getData() ? "1" : "0");
            }           
        });

    }

    /**
     * {@inheritDoc}
     */
    public function getName()
    {
        return 'meta_tag_preset';
    }

    /**
     * {@inheritDoc}
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'VisualM\TagManagerBundle\Entity\MetaTagPreset',
            'translation_domain' => 'forms'
        ));

    }

}
