<?php

namespace CpCreation\VitiCore\Bridge\Symfony\Bundle\Form\Admin;

use A2lix\TranslationFormBundle\Form\Type\TranslationsType;
use CpCreation\VitiCore\Shop\Model\ShippingZone;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use CpCreation\VitiCore\Product\Model\ProductType as ModelProductType;

/**
 * @author Colinet Julien
 */
class ProductTypeType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('volume', NumberType::class, [
                'required' => false,
                'label'    => 'Volume',
            ])
            ->add('unity', ChoiceType::class, [
                'label'    => 'Unité',
                'required' => false,
                'choices'  => [
                    'Centilitre' => 'cl',
                    'Litre'      => 'L',
                    'Gramme'     => 'g',
                    'Kilogramme' => 'kg',
                    'unité'      => 'unity',
                ],
            ])
            ->add('maximumQuantityCart', IntegerType::class, [
                'label'    => 'Quantité maximum par commande',
                'required' => false,
            ])
            ->add('multipleQuantityCart', IntegerType::class, [
                'label'    => 'Multiple minimum en livraison standard',
                'required' => true,
            ])
            ->add('multipleQuantityDepot', IntegerType::class, [
                'label'    => 'Multiple minimum pour les dépôts si MultipleVariant activé dans le dépôt',
                'required' => false,
            ])
            ->add('equivalencyManu', NumberType::class, [
                'label'    => 'Equivalence du type en format bouteille pour frais de port ( Mode Manuel )',
                'required' => true,
            ])
            ->add('equivalency', NumberType::class, [
                'label'    => 'Equivalence du type en format bouteille pour frais de port ( Mode Auto )',
                'required' => true,
            ])
            ->add('equivalencyDegressive', NumberType::class, [
                'label'    => 'Equivalence du type en format bouteille utilisé pour la dégressivité',
                'required' => true,
            ])
            ->add('equivalencyFreeShipping', NumberType::class, [
                'label'    => 'Equivalence Bouteille pour calcul expédition gratuite à partir d\'un certain nombre de bouteille (Équivalence utilisée pour le calcul de la dégressivité)',
                'required' => false,
            ])
            ->add('equivalencyDefault', CheckboxType::class, [
                'label'    => 'Equivalence par défaut',
                'required' => false,
            ])
            ->add('equivalencyOnShipping', CheckboxType::class, [
                'label'    => 'Prendre en compte en équivalence bouteille pour frais de port rentré manuellement ( Par rapport Equivalence par défaut )',
                'required' => false,
            ])
            ->add('equivalencyDefaultQuantity', CheckboxType::class, [
                'label'    => 'Ajouter à la quantité par défaut pour générer l\'alerte de quantité minimum, si pas cocher la quantité du type sera prioritaire et ne sera pas ajouté sur la quantité par défaut(bouteille)',
                'required' => false,
            ])
            ->add('equivalencyOnFreeShipping', CheckboxType::class, [
                'label'    => 'Prendre en compte en équivalence bouteille pour calcul frais de port gratuit par nombre de bouteille.',
                'required' => false,
            ])
            ->add(
                'translations', TranslationsType::class, [
                    'label'           => false,
                    'fields'          => [
                        'name' => [
                            'field_type' => TextType::class,
                            'label'      => 'Nom',
                            'required'   => true,
                        ],
                        'info' => [
                            'field_type' => TextType::class,
                            'label'      => 'Info pour l\'admin',
                            'required'   => false,
                        ],
                    ],
                    'excluded_fields' => ['slug'],
                ]
            )
            ->add('freeShippingWithBottle', CheckboxType::class, [
                'label'    => 'Force les frais de port à 0 pour ce type si il est associé avec du Champagne',
                'required' => false,
            ])
            ->add('accessory', CheckboxType::class, [
                'label'    => 'Ce type est t-il un accessoire ? (utile si ne rentre pas en compte dans la quantité absolue pour calcul de frais de port gratuit ou pour tout remettre en équivalence bouteille)',
                'required' => false,
            ])
            ->add('orderWithaMinimumEquivalency', IntegerType::class, [
                'label'    => 'Ne peut-être commandé qu\'à partir d\'un minimum de commande en équivalence bouteille (pour la livraison standard, par transporteur)',
                'required' => false,
            ])
            ->add('minFreeShippingWithBottle', IntegerType::class, [
                'label'    => 'Minimum équivalence en bouteille pour frais de port offert si associé avec du Champagne',
                'required' => false,
            ])
            ->add('equivalencyDefaultQuantity', CheckboxType::class, [
                'label'    => 'Ajouter à la quantité par défaut pour générer l\'alerte de quantité minimum, si pas cocher la quantité du type sera prioritaire et ne sera pas ajouté sur la quantité par défaut(bouteille)',
                'required' => false,
            ])
            ->add(
                'zonesFreeShipping', EntityType::class,
                [
                    'class'        => ShippingZone::class,
                    'choice_label' => 'name',
                    'label'        => 'Zone(s) frais de port offert si accessoires commandés avec du Champagne',
                    'multiple'     => true,
                    'required'     => false,
                    'attr'         => [
                        'class' => 'select2',
                    ],
                ]
            )
            ->add('disabledShippingManu', CheckboxType::class, [
                'label'    => 'Désactiver ce type de contenant dans le calcul des frais de port manuel',
                'required' => false,
            ])
            ->add('disabledShippingAuto', CheckboxType::class, [
                'label'    => 'Désactiver ce type de contenant dans le calcul des frais de port auto (tansporteur)',
                'required' => false,
            ])
            ->add('gift', CheckboxType::class, [
                'label'    => "Considérer comme une carte cadeau",
                "required" => false,
            ]);
    }

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