<?php
namespace ModulesGarden\Servers\ZimbraEmail\App\UI\Client\EmailAccount\Sections;
use ModulesGarden\Servers\ZimbraEmail\App\Libs\Product\ProductManager;
use ModulesGarden\Servers\ZimbraEmail\App\Libs\Zimbra\Components\Api\Soap\Repository\ClassOfServices;
use ModulesGarden\Servers\ZimbraEmail\App\Traits\FormExtendedTrait;
use ModulesGarden\Servers\ZimbraEmail\App\UI\Admin\Custom\Sections\FreeFieldsSection;
use ModulesGarden\Servers\ZimbraEmail\App\Validators\PasswordsValidator;
use ModulesGarden\Servers\ZimbraEmail\App\Validators\RepeatPasswordValidator;
use ModulesGarden\Servers\ZimbraEmail\Core\UI\Widget\Forms\Fields\Hidden;
use ModulesGarden\Servers\ZimbraEmail\Core\UI\Widget\Forms\Fields\Password;
use ModulesGarden\Servers\ZimbraEmail\Core\UI\Widget\Forms\Fields\Select;
use ModulesGarden\Servers\ZimbraEmail\Core\UI\Widget\Forms\Fields\Text;
use ModulesGarden\Servers\ZimbraEmail\Core\UI\Widget\Forms\Sections\InputGroup;
use ModulesGarden\Servers\ZimbraEmail\Core\UI\Widget\Forms\Fields\InputGroupElements;

/**
 *
 * Created by PhpStorm.
 * User: Tomasz Bielecki ( tomasz.bi@modulesgarden.com )
 * Date: 12.11.19
 * Time: 13:39
 * Class GeneralSection
 */
class GeneralSection extends FreeFieldsSection
{
    protected $id   = 'generalSection';
    protected $name = 'generalSection';

    use FormExtendedTrait;

    public function initContent()
    {
        /**
         * hosting id
         */
        $hid = $this->getRequestValue('id');

        /**
         * product manager allow to check product settings
         */
        $productManager = new ProductManager();
        $productManager->loadByHostingId($hid);

        $this->generateDoubleSection([new Text('firstname'), new Text('lastname')]);

        $email = new InputGroup('usernameGroup');

        $email->addTextField('username', false, true);
        $email->addInputAddon('emailSign', false, '@');
        $email->addInputComponent((new InputGroupElements\Text('domain'))->addHtmlAttribute('readonly','true'));
        $this->addSection($email);

        $this->generateDoubleSection([new Text('display_name'), new Select('status')]);
        /***
         *
         * set cosId dependent od cos_name
         */
        if($productManager->get('cos_name') === ClassOfServices::CLASS_OF_SERVICE_QUOTA)
        {
            $field = new Select('cosId');
            $this->addField($field);
        }elseif($productManager->get('cos_name') === ClassOfServices::ZIMBRA_CONFIG_OPTIONS)
        {
            $field = new Hidden('cosId');
            $this->addField($field);
        }elseif($productManager->get('cos_name') !== ClassOfServices::CUSTOM_ZIMBRA)
        {
            $field = new Hidden('cosId');
            $this->addField($field);
        }

        $passwd = new Password('password');
        $passwd->setDescription('description');
        $passwd->addValidator(new PasswordsValidator());
        $passwd->notEmpty();

        $repPasswd = (new Password('repeat_password'))->addValidator(new RepeatPasswordValidator());
        $repPasswd->notEmpty();

        $this->generateDoubleSection([$passwd, $repPasswd]);

    }
}