<?php
/**
 * @Author: Sebastian Castro
 * @Date:   2017-03-28 15:29:03
 * @Last Modified by:   Sebastian Castro
 * @Last Modified time: 2018-07-08 12:52:02
 */

namespace App\Admin;

use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\AdminBundle\Form\Type\CollectionType;
use App\Form\CategoryLiteType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use App\Helper\GoGoHelper;

class OptionAdmin extends GoGoAbstractAdmin
{
    protected $baseRouteName = 'admin_app_option';
    protected $baseRoutePattern = 'admin_app_option';

    public function createQuery($context = 'list')
    {
        $query = parent::createQuery($context);

        return $query;
    }

    public function getTemplate($name)
    {
        switch ($name) {
         case 'edit': return 'admin/edit/edit_option_category.html.twig';
             break;
         default: return parent::getTemplate($name);
             break;
     }
    }

    protected function configureFormFields(FormMapper $formMapper)
    {
        // prevent circular reference, i.e setting a child as parent
        $dm = GoGoHelper::getDmFromAdmin($this);
        $repo = $dm->get('Category');
        $parentQuery = null;
        if ($this->subject) {
          $parentQuery = $repo->createQueryBuilder()
                          ->field('id')->notIn($this->subject->getAllSubcategoriesIds());
        }

        $formMapper
       ->tab('main')
         ->halfPanel('primary')
            ->add('name', null, ['required' => true])
            ->add('color', null, ['attr' => ['class' => 'gogo-color-picker']])
            ->add('icon', null, ['attr' => ['class' => 'gogo-icon-picker']])
            ->add('parent', ModelType::class, [
              'class' => 'App\Document\Category',
              'required' => true,
              'query' => $parentQuery,
              'mapped' => true, ], [])
         ->end()
         ->halfPanelDefault('secondary')
            ->add('useIconForMarker')
            ->add('useColorForMarker')
         ->end()
         ->halfPanelDefault('display')
            ->add('displayInMenu')
            ->add('displayInInfoBar')
            ->add('displayInForm')
         ->end()
        // 05/2021 not working properly so hiding
        //  ->panel('subcategories', array('class' => 'col-xs-12 sub-categories-container'))
        //     ->add('subcategories', CollectionType::class, array(
        //       'by_reference' => false,
        //       'entry_type' => CategoryLiteType::class,
        //       'allow_add' => true,
        //       'label_attr'=> ['style'=> 'display:none']))
        //  ->end()
        ->end()
      ->tab('advanced')
        ->halfPanelDefault('secondary')
            ->add('nameShort')
            ->add('customId')
            ->add('softColor', null, ['attr' => ['class' => 'gogo-color-picker']])
            ->add('textHelper')
            ->add('url')
            ->add('index')
            ->add('showExpanded')
            ->add('unexpandable')
        ->end()

        ->halfPanelDefault('displayChildren')
            ->add('displayChildrenInMenu')
            ->add('displayChildrenInInfoBar')
            ->add('displayChildrenInForm')
        ->end()

        ->halfPanelDefault('osm')
            ->add('osmTags', TextType::class, ['attr' => ['class' => 'gogo-osm-tags']])
        ->end()
        
        ->halfPanelDefault('description')
            ->add('enableDescription')
            ->add('descriptionLabel')
        ->end()

      ->end()
      ;
    }

    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
          ->addIdentifier('name')
          ->add('_action', 'actions', [
                'actions' => [
                    'edit' => [],
                    'delete' => [],
                    'move' => [
                        'template' => '@PixSortableBehavior/Default/_sort.html.twig',
                    ],
                ],
            ]);
    }

    protected function configureRoutes(RouteCollection $collection)
    {
        $collection->add('move', $this->getRouterIdParameter().'/move/{position}');
    }
}