<?php

namespace OfficeBrain\Bundle\EmailBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use OfficeBrain\Bundle\EmailBundle\Form\EmailTemplateHeaderLanguage;
use OfficeBrain\Bundle\EmailBundle\Form\EmailTemplateHeaderLanguageType;
use Symfony\Component\Translation\Translator;
use Symfony\Component\Validator\ExecutionContextInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\NotBlank;

class EmailTemplateHeaderMasterType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        
        $builder
            ->add('id', 'hidden', array('required' => false))    
            ->add('name', 'text', array( 'label' => 'email.header.form.name',
                 'constraints' => array(
                                new NotBlank(array('message' => 'email.form.not_blank')),
                                new Assert\Callback(array('methods' => array(array($this, 'isDuplicateHeaderOrNot')))),
                                
                        )))
            ->add('header', 'entity', array(
                    'class' => 'OfficeBrainEmailBundle:EmailPredefinedHeader',
                    'label' => 'email.header.form.predefined_header',
                    'property' => 'name',
                    'data' => 'Blank Header',
            		'placeholder' => 'email.header.form.placeholder.preheader',         		
                    'expanded' => false,
                    'multiple' => false,
                    'required' => false,
                    'mapped' => false
            ));
            if($options['data']->getId()){
               $builder->remove('header'); 
            }    
            $builder->add('content', 'collection', array('type' => new EmailTemplateHeaderLanguageType(), 'cascade_validation' => true));
            $builder->add('status', 'choice', array('choices'  => array('0' => 'InActive', '1' => 'Active'), 'label' => 'email.event.form.status'));
        
    }
     public function setForm($form)
    {
        $this->form = $form;
    }

    public function setEmailTemplateManager($setEmailTemplateManager)
    {
        $this->emailTemplateManager = $setEmailTemplateManager;
    }
    
    public function isDuplicateHeaderOrNot($data, ExecutionContextInterface $context)
    {   
      
        if ($this->emailTemplateManager && $data != '') {
            
            $id = $this->form->get('id')->getData();
            if ($this->emailTemplateManager->isDuplicateHeaderOrNot($data,$id) > 0) {
                $context->addViolation('email.form.not_exsist');
            }
        }
        
    }
    
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'OfficeBrain\Bundle\EmailBundle\Entity\EmailTemplateHeaderMaster', 'cascade_validation' => true
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'officebrain_bundle_emailbundle_emailtemplateheadermaster';
    }
}
