<?php


namespace Leadlion\PersoanaJuridica\Plugin\Checkout;

/**
 * Class LayoutProcessor
 */
class LayoutProcessor
{
    /**
     * @var array
     */
    protected $orderFixes = [];

    /**
     * @param $field
     * @param $order
     */
    public function setOrder($field, $order)
    {
        $this->orderFixes[$field] = $order;
    }

    /**
     * @param \Mageplaza\Osc\Block\Checkout\LayoutProcessor $subject
     * @param array $result
     * @return array
     */
    public function afterProcess(
        \Mageplaza\Osc\Block\Checkout\LayoutProcessor $subject,
        $result
    ) {

        $shippingAddressFieldset= &$result['components']['checkout']['children']['steps']['children']['shipping-step']
        ['children']['shippingAddress']['children']['shipping-address-fieldset']['children'];
        $shippingAddressFieldset['company']['additionalClasses']='col-sm-24';
        $shippingAddressFieldset['region_id']['additionalClasses']='col-sm-12';
        $shippingAddressFieldset['city']['additionalClasses']='col-sm-12';
        $shippingAddressFieldset['street']['additionalClasses']='col-sm-24 p-3';
        $shippingAddressFieldset['taxvat']['additionalClasses']='col-sm-12';

        $campuriPJ= [
           'company' =>$shippingAddressFieldset['company'],
           'taxvat' => $shippingAddressFieldset['taxvat'],
           'mfinante' => $shippingAddressFieldset['mfinante'],
           'region_id' => $shippingAddressFieldset['region_id'],
           'city' => $shippingAddressFieldset['city'],
           'street' => $shippingAddressFieldset['street'],
        ];

        $this->setPjFieldsOrder($campuriPJ);
        $campuriPJ['taxvat']['label']="CUI";

        $shippingAddressFieldset['city']['additionalClasses']='campuri_pf';
        $shippingAddressFieldset['street']['additionalClasses']='campuri_pf';
        $shippingAddressFieldset['region_id']['additionalClasses']='campuri_pf';

        $result['components']['checkout']['children']['steps']['children']['shipping-step']
            ['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['campuri_pj']['children']=$campuriPJ;

        $result['components']['checkout']['children']['steps']['children']['shipping-step']['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['persoana_juridica']['sortOrder']=0;
        $result['components']['checkout']['children']['steps']['children']['shipping-step']['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['campuri_pj']['sortOrder']=120;

        $result['components']['checkout']['children']['steps']['children']['shipping-step']
            ['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['city']['component'] = 'Leadlion_PersoanaJuridica/js/view/form/element/city';
        $result['components']['checkout']['children']['steps']['children']['shipping-step']
            ['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['city']['config']['template'] = 'Leadlion_PersoanaJuridica/shippingCity';

        // $result['components']['checkout']['children']['steps']['children']['shipping-step']
        // ['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['campuri_pj']['children']['city']['component'] = 'Leadlion_PersoanaJuridica/js/view/form/element/city';
        // $result['components']['checkout']['children']['steps']['children']['shipping-step']
        // ['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['campuri_pj']['children']['city']['config']['template'] = 'Leadlion_PersoanaJuridica/shippingCity';

        unset($shippingAddressFieldset['company']);
        unset($shippingAddressFieldset['taxvat']);
        unset($shippingAddressFieldset['mfinante']);
        unset($result['components']['checkout']['children']['steps']['children']['shipping-step']['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['campuri_pj']['children']['city']);
        unset($result['components']['checkout']['children']['steps']['children']['shipping-step']['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['campuri_pj']['children']['region_id']);
        unset($result['components']['checkout']['children']['steps']['children']['shipping-step']['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['campuri_pj']['children']['street']);

        //billing step

        $billingAddressFieldset= &$result['components']['checkout']['children']['steps']['children']['shipping-step']
        ['children']['billingAddress']['children']['billing-address-fieldset']['children'];

        $billingAddressFieldset['company']['additionalClasses']='col-sm-24';
        $billingAddressFieldset['region_id']['additionalClasses']='col-sm-12';
        $billingAddressFieldset['city']['additionalClasses']='col-sm-12';
        $billingAddressFieldset['street']['additionalClasses']='col-sm-24 p-3';
        $billingAddressFieldset['taxvat']['additionalClasses']='col-sm-12';
        $billingAddressFieldset['country_id']['visible'] = false;

        $campuriPJ= [
            'company' =>$billingAddressFieldset['company'],
            'taxvat' => $billingAddressFieldset['taxvat'],
            'mfinante' => $billingAddressFieldset['mfinante'],
            'region_id' => $billingAddressFieldset['region_id'],
            'city' => $billingAddressFieldset['city'],
            'street' => $billingAddressFieldset['street']
        ];

        $this->setPjFieldsOrder($campuriPJ);
        $campuriPJ['taxvat']['label']="CUI";

        $billingAddressFieldset['city']['additionalClasses']='campuri_pf';
        $billingAddressFieldset['street']['additionalClasses']='campuri_pf';
        $billingAddressFieldset['region_id']['additionalClasses']='campuri_pf';


        $billingAddressFieldset['campuri_pj']['children'] = $campuriPJ;
        $billingAddressFieldset['persoana_juridica']['sortOrder'] = 0;
        $billingAddressFieldset['campuri_pj']['sortOrder'] = 120;
        $billingAddressFieldset['city']['component'] = 'Leadlion_PersoanaJuridica/js/view/form/element/city';
        $billingAddressFieldset['city']['config']['template'] = 'Leadlion_PersoanaJuridica/shippingCity';

        // $billingAddressFieldset['campuri_pj']['children']['city']['component'] = 'Leadlion_PersoanaJuridica/js/view/form/element/city';
        // $billingAddressFieldset['campuri_pj']['children']['city']['config']['template'] = 'Leadlion_PersoanaJuridica/shippingCity';

        unset($billingAddressFieldset['company']);
        unset($billingAddressFieldset['taxvat']);
        unset($billingAddressFieldset['mfinante']);
        unset($billingAddressFieldset['campuri_pj']['children']['city']);

        unset($result['components']['checkout']['children']['steps']['children']['shipping-step']['children']['billingAddress']['children']['billing-address-fieldset']['children']['campuri_pj']['children']['city']);
        unset($result['components']['checkout']['children']['steps']['children']['shipping-step']['children']['billingAddress']['children']['billing-address-fieldset']['children']['campuri_pj']['children']['region_id']);
        unset($result['components']['checkout']['children']['steps']['children']['shipping-step']['children']['billingAddress']['children']['billing-address-fieldset']['children']['campuri_pj']['children']['street']);

        return $result;
    }

    protected function setPjFieldsOrder(&$pjFields) {
        $fieldsInDesiredOrder = ['mfinante', 'company', 'taxvat', 'street', 'region_id', 'city'];
        $order = 0;
        foreach ($fieldsInDesiredOrder as $field) {
            $pjFields[$field]['sortOrder'] = $order++;
        }
    }
}
