<?php

/*
 * This file is part of the VitiCore 2.
 *
 * (c) CP Creation <web@cpcreation.fr>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

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

use A2lix\TranslationFormBundle\Form\Type\TranslationsType;
use CpCreation\VitiCore\Product\Model\ProductType as ModelProductType;
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;

final class ProductTypeType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $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' => false,
                        ],
                        '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): void
    {
        $resolver->setDefaults(
            [
                'data_class' => ModelProductType::class,
                'translation_domain' => 'form',
            ]
        );
    }
}
