<?php

namespace App\Form\Type;

use App\Entity\GlobalParameter;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Email as EmailConstraint;
use Symfony\Component\Validator\Constraints\Regex as RegexConstraint;
use Symfony\Component\Validator\Constraints\Type as TypeConstraint;

class GlobalConfigurationFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('mlcname', GlobalParameterType::class, [
                'label' => 'Nom de la Monnaie (long) :',
                '_description' => 'Nom (long) de la MLC',
                'name_param' => GlobalParameter::MLC_NAME,
                '_placeholder' => 'Monnaie Locale Complémentaire MoLoCo',
                'required' => true,
            ])
            ->add('mlcsmallname', GlobalParameterType::class, [
                'label' => 'Nom court de la Monnaie ou abréviation :',
                '_description' => 'Nom raccourci de la MLC',
                'name_param' => GlobalParameter::MLC_NAME_SMALL,
                '_placeholder' => 'MoLoCo',
                'required' => true,
            ])
            ->add('mlcsymbol', GlobalParameterType::class, [
                'label' => 'Symbole / devise de la monnaie locale (3 caractères maximum) :',
                '_description' => 'Symbole / Devise de la MLC',
                'name_param' => GlobalParameter::MLC_SYMBOL,
                '_placeholder' => 'MLC',
                'required' => true,
            ])
            ->add('mlcnotifemail', GlobalParameterType::class, [
                'label' => "Email utilisé pour l'envoi des notifications :",
                '_description' => "Email d'envoi des notification",
                'name_param' => GlobalParameter::MLC_NOTIF_EMAIL,
                'required' => true,
                '_placeholder' => 'notification@votredomaine.fr',
                'constraints_param' => [
                    new EmailConstraint(['message' => 'Email invalide !']),
                ],
            ])
            ->add('mlccontactemail', GlobalParameterType::class, [
                'label' => 'Email de reception des demandes de contact :',
                '_description' => 'Email de réception du formulaire de contact',
                'name_param' => GlobalParameter::MLC_CONTACT_EMAIL,
                'required' => true,
                '_placeholder' => 'contact@votredomaine.fr',
                'constraints_param' => [
                    new EmailConstraint(['message' => 'Email invalide !']),
                ],
            ])
            ->add('mlccotisationadh', GlobalParameterType::class, [
                'label' => 'Montant minimum des cotisations des adhérents :',
                '_description' => 'Montant minimum des cotisations des adhérents',
                'name_param' => GlobalParameter::COTISATION_ADHERENT,
                'help' => 'Ne pas utiliser de virgule ",", utiliser le point "."',
                'required' => true,
                '_placeholder' => '10',
                'constraints_param' => [
                    new TypeConstraint(['type' => 'numeric', 'message' => "Le montant n'est pas valide !"]),
                ],
            ])
            ->add('mlccotisationpresta', GlobalParameterType::class, [
                'label' => 'Montant minimum des cotisations des prestataires :',
                '_description' => 'Montant minimum des cotisations des prestataires :',
                'name_param' => GlobalParameter::COTISATION_PRESTATAIRE,
                'help' => 'Ne pas utiliser de virgule ",", utiliser le point "."',
                'required' => true,
                '_placeholder' => '10',
                'constraints_param' => [
                    new TypeConstraint(['type' => 'numeric', 'message' => "Le montant n'est pas valide !"]),
                ],
            ])
            ->add('mlcreconversionpresta', GlobalParameterType::class, [
                'label' => 'Taux de reconversion des prestataires (Pour 2%, il faut taper "2" et pas 0.02 ou 2%) :',
                '_description' => 'Taux de reconversion des prestataires',
                'name_param' => GlobalParameter::RECONVERSION_PRESTATAIRE,
                'help' => 'Ne pas utiliser de virgule ",", utiliser le point "."',
                'required' => true,
                '_placeholder' => '0',
                'constraints_param' => [
                    new TypeConstraint(['type' => 'numeric', 'message' => "Le montant n'est pas valide !"]),
                ],
            ])
            ->add('mapcenter', GlobalParameterType::class, [
                'label' => 'Coordonnées du centre de la carte (Format [lat,long], exemple : [45.7,3.2]):',
                '_description' => 'Centre de la carte (Coordonnées GPS inscrites comme ceci (sans les guillemets !) : \'[45.7,3.2]\'',
                'name_param' => GlobalParameter::MAP_CENTER,
                'required' => true,
                '_placeholder' => '[45.7,3.2]',
                'constraints_param' => [
                    new RegexConstraint(['pattern' => '/^\[[0-9]+\.[0-9]+,[0-9]+\.[0-9]+\]/', 'message' => 'Coordonnées invalide, format attendu : [45.7,3.2]']),
                ],
                'help_html' => true,
                'help' => "Pour déterminer le centre et zoom de la carte <a target='_blank' href='https://www.openstreetmap.org/'>Ouvrir OpenStreetMap</a><br/>
                            Exemple : <em>https://www.openstreetmap.org/search?query=clermont#map=12/45.7811/3.0927</em><br/>
                            Zoom de la carte   : 12<br/>
                            Centre de la carte : [45.7811,3.0927]",
            ])
            ->add('mapzoom', GlobalParameterType::class, [
                'label' => 'Zoom de la carte (entre 8 et 12 en général) :',
                '_description' => 'Zoom de la carte (entre 8 et 12 en général)',
                'name_param' => GlobalParameter::MAP_ZOOM,
                'required' => true,
                '_placeholder' => '9',
                'constraints_param' => [
                    new RegexConstraint(['pattern' => '/^[1-9]$|^1[0-9]$/', 'message' => 'Le zoom doit être un nombre entre 1 et 19, généralement entre 9 et 15 pour les MLC !']),
                ],
            ])
            // @TODO : checkbox au lieu de texttype pour certains paramètres globaux
            ->add('usewordpress', GlobalParameterType::class, [
                'label' => false,
                '_description' => 'Utiliser le module Wordpress et désactiver les fonctions du site kohinos (ne pas cocher, pas encore développé)',
                'label' => 'Utiliser Wordpress pour le site web (pas encore développé)',
                'name_param' => GlobalParameter::USE_WORDPRESS,
                '_placeholder' => 'false',
                '_data' => 'false',
                // '_type' => CheckboxType::class,
                // '_type_options' => ['label' => 'Utiliser Wordpress pour le site web (pas encore développé)',
                //     'required' => false,
                //     // 'disabled' => true,
                //     'label_attr' => ['class' => 'checkbox-inline'], ],
                'help' => 'Si cette option est à "true", le site web public du Kohinos sera désactivé, seul la page de connexion et l\'administration seront accesssible !',
            ])
            ->add('usepayzen', GlobalParameterType::class, [
                'label' => false,
                '_description' => 'Utiliser la module de paiement Payzen',
                'name_param' => GlobalParameter::USE_PAYZEN,
                'label' => 'Utiliser le paiement par CB avec Payzen',
                '_placeholder' => 'false',
                '_data' => 'false',
                // '_type' => CheckboxType::class,
                // '_type_options' => ['label' => 'Utiliser le paiement par CB avec Payzen',
                //     'required' => false,
                //     'label_attr' => ['class' => 'checkbox-inline'], ],
                'help' => 'Si cette option est à "true", les utilisateurs pourront cotiser et acheter de la monnaie locale par CB sur l\'application  (compte Payzen activé obligatoire).',
            ])
            ->add('allTickets', GlobalParameterType::class, [
                'label' => 'Valeur des différents montants des billets de MLC :',
                '_description' => 'Valeur des différents montants des billets de MLC (exemple : 1,2,5,10,20,50)',
                'help' => 'Valeurs séparés par une virgule, le séparateur décimal est le point',
                'name_param' => GlobalParameter::ALL_TICKETS,
                'required' => true,
                '_placeholder' => '0.5,1,2,5,10,20,50',
                'constraints_param' => [
                    new RegexConstraint(['pattern' => '/^(([1-9][0-9]*),?)*$/', 'message' => 'La valeur doit être des nombres  supérieur à zéro séparés par une virgule']),
                ],
            ])
        ;
    }

    public function getBlockPrefix()
    {
        return 'formGlobalConfiguration';
    }
}
