<?php

namespace PrestaShop\Module\PolarisPrestaConnector\Forms;

use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

/**
 * Champ composé du mappage des couleurs.
 *
 * Affiche deux sélecteurs sur une même ligne :
 *   [ attribut/catégorie source (back-office) ]  ⇒ Mappage couleur ⇒  [ groupe d'attributs de destination ]
 *
 * La valeur du back-office choisie comme source est passée par la moulinette
 * (AttributesManager::getMappedColor) puis reportée dans le groupe d'attributs
 * Prestashop de destination. Le rendu horizontal est assuré par le thème de
 * formulaire views/templates/admin/color_mapping_widget.html.twig (block
 * pc_color_mapping_widget).
 */
class ColorMappingType extends ConnectorType {

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // Choix de la source : on inverse [clé => libellé] en [libellé => clé]
        // attendu par ChoiceType.
        $sourceChoices = [];
        foreach ($options['sources'] as $key => $label)
            $sourceChoices[$label] = $key;

        $builder->add('source', ChoiceType::class, [
            'label' => false,
            'required' => false,
            'expanded' => false,
            'multiple' => false,
            'placeholder' => '--- (aucune)',
            'choices' => $sourceChoices,
        ]);

        // Les groupes d'attributs Prestashop contiennent déjà l'entrée '---' => 0.
        $builder->add('destination', ChoiceType::class, [
            'label' => false,
            'required' => false,
            'expanded' => false,
            'multiple' => false,
            'empty_data' => 0,
            'choices' => $options['attributeGroups'],
        ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'sources' => [],
            'attributeGroups' => [],
            'label' => false,
        ]);
        $resolver->setAllowedTypes('sources', 'array');
        $resolver->setAllowedTypes('attributeGroups', 'array');
    }

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

}
