<?php

namespace OfficeBrain\Bundle\RewardReferralBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;

class RewardReferralConfigurationType extends AbstractType
{
    public function __construct($countryId)
    {
        $this->countryId=$countryId;
    }

    
    
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $default=0;
        $defaultRadio=0;
        $formObj=$options['data'];
        //echo "<pre>"; print_r($formObj->getShowOnProduct());die;
        $builder
            ->add('conversionRate', 'text',
                array('required'=>false))
            ->add('expiryInDays', 'text', array('required'=>false, 'data'=>($formObj->getExpiryInDays()=='')?$default:$formObj->getExpiryInDays()))
            ->add('maxRewardPoint', 'text', array('required'=>false, 'data'=>($formObj->getMaxRewardPoint()=='')?$defaultRadio:$formObj->getMaxRewardPoint()))
            ->add('showOnProduct', 'choice', array(
                'label' => 'Show On Product',
                'choices' => $this->getBoolean(),
                'multiple' => false,
                'required' => true,
                'constraints' => array(),
                'expanded' => true,
                'empty_value' => false,
                'data' => ($formObj->getShowOnProduct() == '')?$defaultRadio:$formObj->getShowOnProduct(),
            ))
            ->add('showPointHistory', 'choice', array(
                'label' => 'Show Point History',
                'choices' => $this->getBoolean(),
                'multiple' => false,
                'required' => true,
                'constraints' => array(),
                'expanded' => true,
                'empty_value' => false,
                'data' => ($formObj->getShowPointHistory() == '')?$defaultRadio:$formObj->getShowPointHistory(),
            ))
            ->add('maxRedeemLimit', 'text', array('required'=>false, 'data'=> ($formObj->getMaxRedeemLimit()=='')?$default:$formObj->getMaxRedeemLimit()))
            ->add('minRedeemLimit', 'text', array('required'=>false, 'data'=>($formObj->getMinRedeemLimit()=='')?$default:$formObj->getMinRedeemLimit()))
            ->add('maxReferralLimit', 'text', array('required'=>false, 'data'=>($formObj->getMaxReferralLimit()=='')?$default:$formObj->getMaxReferralLimit()))
            ->add('registrationPointReferrer', 'text', array('required'=>false, 'data'=>($formObj->getRegistrationPointReferent()=='')?$default:$formObj->getRegistrationPointReferent()))
            ->add('registrationPointReferent', 'text', array('required'=>false, 'data'=>($formObj->getRegistrationPointReferent()=='')?$default:$formObj->getRegistrationPointReferent()))
            ->add('referralOnPurchase', 'choice', array(
                'label' => 'Show Point History',
                'choices' => $this->getBoolean(),
                'multiple' => false,
                'required' => true,
                'constraints' => array(),
                'expanded' => true,
                'empty_value' => false,
                'data' =>  ($formObj->getReferralOnPurchase()== '')?$default:$formObj->getReferralOnPurchase(),
            ))
            ->add('productPoint', 'text', array('required'=>false, 'data'=>($formObj->getProductPoint()=='')?$default:$formObj->getProductPoint()))
            ->add('maxReferralSingleAttemptLimit', 'text', array('required'=>false, 'data'=>($formObj->getMaxReferralSingleAttemptLimit()=='')?$default:$formObj->getMaxReferralSingleAttemptLimit()))
            ->add('maxPurchaseLimit', 'text', array('required'=>false))
            ->add('status', 'choice', array('choices' => $this->getStatus()))
            ->add('countryId', 'hidden', array('data'=>$this->countryId))
            ->add('id', 'hidden');
            
        $builder
                   ->add('referralPurchasePoint', 'collection', array(
                    'type' => new ReferralPurchasePointType(),
                    'allow_add' => true,
                    'allow_delete' => true,
                    'by_reference' => false,
                    //'prototype_name' => "email",
                    'delete_empty' => true,
                    'options' => array(
                            'label' => false
                        )
                ));
         
         /**
          * Description:
          */
         $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
           
             $purchaseLimit = $event->getData()['maxPurchaseLimit'];
             $referralOnPurchase = $event->getData()['referralOnPurchase'];
             
             $form = $event->getForm();
            if ($purchaseLimit <= 0 && $referralOnPurchase == 1) {
                $form->add('maxPurchaseLimit', 'text', array('constraints' => array(
                            new Assert\GreaterThan(array('value' => 0, 'message' => 'rewardreferral.admin.valid.maxpurchase')))
                            )
                    );
            }
        });
    }
    
    
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'OfficeBrain\Bundle\RewardReferralBundle\Entity\RewardReferralConfiguration'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'form';
    }
    
    public function getStatus()
    {
        return array(1=>'Active',0=>'Inactive');
    }
    
    public function getBoolean()
    {
        return array('1'=>'Yes',0=>'No');
    }
}
