<?php

namespace App\Form;

use ConnectHolland\CookieConsentBundle\Cookie\CookieChecker;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use ConnectHolland\CookieConsentBundle\Form\CookieConsentType as BaseCookieConsentType;

class CookieConsentTypeExtension extends AbstractTypeExtension
{
    /**
     * @var CookieChecker
     */
    protected $cookieChecker;

    /**
     * @var array
     */
    protected $cookieCategories;

    /**
     * @var bool
     */
    protected $cookieConsentSimplified;

    public function __construct(
            CookieChecker $cookieChecker,
            array $cookieCategories = [],
            bool $cookieConsentSimplified = null
    ) {
        $this->cookieChecker = $cookieChecker;
        $this->cookieCategories = $cookieCategories;
        $this->cookieConsentSimplified = $cookieConsentSimplified;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        foreach ($this->cookieCategories as $category) {
            $builder->remove($category);

            $data = 'true';
            if ($this->cookieChecker->isCookieConsentSavedByUser() && !$this->cookieChecker->isCategoryAllowedByUser(
                            $category
                    )) {
                $data = 'false';
            }

            $builder->add(
                    $category,
                    ChoiceType::class,
                    [
                            'expanded' => true,
                            'multiple' => false,
                            'data' => $data,
                            'choices' => [
                                    ['ch_cookie_consent.yes' => 'true'],
                                    ['ch_cookie_consent.no' => 'false'],
                            ],
                    ]
            );
        }
    }

    public static function getExtendedTypes(): iterable
    {
        return [BaseCookieConsentType::class];
    }
}