<?php

namespace Lc\CaracoleBundle\Controller\Setting;

use Doctrine\ORM\EntityManagerInterface;
use Lc\CaracoleBundle\Definition\MerchantSettingDefinitionInterface;
use Lc\CaracoleBundle\Form\Setting\MerchantSettingsFormType;
use Lc\CaracoleBundle\Form\Setting\SectionSettingsFormType;
use Lc\CaracoleBundle\Resolver\MerchantResolver;
use Lc\CaracoleBundle\Resolver\SectionResolver;
use Lc\CaracoleBundle\Definition\SectionSettingDefinitionInterface;
use Lc\SovBundle\Translation\TranslatorAdmin;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;

class SettingAdminController extends AbstractController
{
    protected $em;
    protected $merchantResolver;
    protected $merchantSettingDefinition;
    protected $sectionResolver;
    protected $sectionSettingDefinition;
    protected $translatorAdmin;

    public function __construct(
            EntityManagerInterface $em,
            MerchantResolver $merchantResolver,
            SectionResolver $sectionResolver,
            MerchantSettingDefinitionInterface $merchantSettingDefinition,
            SectionSettingDefinitionInterface $sectionSettingDefinition,
            TranslatorAdmin $translatorAdmin
    ) {
        $this->em = $em;
        $this->merchantResolver = $merchantResolver;
        $this->sectionResolver = $sectionResolver;
        $this->merchantSettingDefinition = $merchantSettingDefinition;
        $this->sectionSettingDefinition = $sectionSettingDefinition;
        $this->translatorAdmin = $translatorAdmin ;
    }

    public function manageMerchant(Request $request)
    {
        return $this->manage($request, 'merchant');
    }

    public function manageSection(Request $request)
    {
        return $this->manage($request, 'section');
    }

    public function manage(Request $request, $type)
    {
        $entity = null ;

        if ($type == 'merchant') {
            $resolver = $this->merchantResolver ;
            $formClass = MerchantSettingsFormType::class;
            $settingDefinition = $this->merchantSettingDefinition ;
        } elseif ($type == 'section') {
            $resolver = $this->sectionResolver ;
            $formClass = SectionSettingsFormType::class;
            $settingDefinition = $this->sectionSettingDefinition ;
        }

        $entity = $resolver->getCurrent();

        if ($entity) {
            $form = $this->createForm($formClass, $entity);

            $form->handleRequest($request);

            if ($form->isSubmitted() && $form->isValid()) {
                $this->em->update($entity);
                $this->em->flush();

                $this->addFlash('success', $this->translatorAdmin->transFlashMessage('settings_saved'));
            }

            return $this->render(
                    '@LcCaracole/admin/setting/' . $type . '.html.twig',
                    [
                            'resolver' => $resolver,
                            'setting_definition' => $settingDefinition,
                            'form' => $form->createView()
                    ]
            );
        }
    }

}