<?php
loadcontroller('base/module');

class ControllerShippingMelhorenvio extends ControllerBaseModule
{

    protected $referencePathFile = 'shipping/melhorenvio';

    protected $fieldsToRemoveMask = [
        'melhorenvio_valor_extra' => 'removeMaskToDouble'
    ];

    protected function loadData()
    {
        $this->load->type('tipocomum');
        $this->load->type('tipofrete');

        $this->dataVue['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones();

        if ($this->config->get('processo_venda_status')) {
            $this->dataVue['order_statuses'] = $this->dmodel_proccess_order_to_situation->getProccessStatusAll();
        } else {
            $this->dataVue['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
        }

        $this->dataVue['Type_CadastroPessoa'] = Type_CadastroPessoa::getEnumList();
        $this->dataVue['Type_Status'] = Type_Status::getEnumList();
        $this->dataVue['Type_DsimDnao'] = Type_DsimDnao::getEnumList();
        $this->dataVue['Type_Environment'] = Type_Environment::getEnumList();
        $this->dataVue['Type_AcrescimoDesconto'] = Type_AcrescimoDesconto::getEnumList();
        $this->dataVue['Type_TipoCotacao'] = Type_MelhorenvioTipoCotacao::getEnumList();

        $this->dataVue['configurations'] = $this->model_setting_setting->getSetting('melhorenvio');
        $this->dataVue['autentication'] = $this->urlloja->link('', '', 'NONSSL', false) . 'melhorenvioauth';
        $this->dataVue['callback'] = $this->urlloja->link('', '', 'NONSSL', false) . 'melhorenviocallback';

        $this->dataVue['help_link'] = 'http://manual.futurasistemas.com.br/manual-do-sistema/como-realizar-a-integracao-com-o-melhor-envio-faq95/';

        $this->setDefaultValues();
    }

    protected function loadModel()
    {
        parent::loadModel();
        $this->load->model('localisation/geo_zone');
        $this->load->dmodel('proccess/order_to_situation');
        $this->load->model('localisation/order_status');
    }

    private function setDefaultValues()
    {
        $arrayDefault = array('melhorenvio_prazo_extra', 'melhorenvio_valor_extra');

        foreach ($arrayDefault as $value) {
            if (!in_array($value, array_keys($this->dataVue['configurations']))) {
                $this->dataVue['configurations'][$value] = "0";
            }
        }
    }

    public function saveSetting()
    {
        $this->loadLanguage();

        $response = [];

        if (!$this->user->hasPermission('modify', 'shipping/melhorenvio')) {
            $response['warning'] = $this->language->get('error_permission');
            return $this->response->setOutputJson($response);
        }

        $this->errors = $this->validate();
        if (!$this->errors) {
            // setando tokens pra não apagar com o post
            $this->request->post['melhorenvio_access_token'] = $this->config->get('melhorenvio_access_token');
            $this->request->post['melhorenvio_refresh_token'] = $this->config->get('melhorenvio_refresh_token');
            $this->request->post['melhorenvio_token_expire'] = $this->config->get('melhorenvio_token_expire');
            $this->request->post['melhorenvio_client_id'] = $this->config->get('melhorenvio_client_id');
            $this->request->post['melhorenvio_client_secret'] = $this->config->get('melhorenvio_client_secret');
            if (!isset($this->request->post['melhorenvio_valor_extra']) or empty($this->request->post['melhorenvio_valor_extra'])) {
                $this->request->post['melhorenvio_valor_extra'] = 0;
            }

            $this->load->model('setting/setting');
            $this->model_setting_setting->editSetting('melhorenvio', $this->request->post);

            $response['success'] = $this->language->get('text_success');
        } else {
            $response['errors'] = $this->errors;
        }

        return $this->response->setOutputJson($response);
    }

    protected function validate()
    {
        $this->loadLanguage();
        $this->load->type('tipocomum');

        extract($this->request->post);

        $errors = [];

        $errors = $this->validate->execute([
            'melhorenvio_status' => [
                'value' => $melhorenvio_status,
                'validates' => ['isEmpty', 'isEnabledOrDisabled']
            ],
            'melhorenvio_sort_order' => [
                'value' => $melhorenvio_sort_order,
                'validates' => ['isIntegerNumber']
            ],
            'melhorenvio_postcode' => [
                'value' => $melhorenvio_postcode,
                'validates' => ['isEmpty', 'isCep']
            ],
            'melhorenvio_tipo_valor_extra' => [
                'value' => $melhorenvio_tipo_valor_extra,
                'validates' => ['isEmpty']
            ],
            'melhorenvio_prazo_extra' => [
                'value' => $melhorenvio_prazo_extra,
                'validates' => ['isEmpty']
            ],
            'melhorenvio_geo_zone_id' => [
                'value' => $melhorenvio_geo_zone_id,
                'validates' => ['isEmpty']
            ],
            'melhorenvio_jadlog_agency' => [
                'value' => $melhorenvio_jadlog_agency,
                'validates' => ['isIntegerNumber']
            ],
            'melhorenvio_tracking_delivered_status' => [
                'value' => $melhorenvio_tracking_delivered_status,
                'validates' => ['isEmpty']
            ],
            'melhorenvio_address' => [
                'value' => $melhorenvio_address,
                'validates' => [
                    'isEmpty',
                    [
                        'method' => 'isMinMax',
                        'min' => '1',
                        'max' => '64',
                    ]
                ]
            ],
            'melhorenvio_district' => [
                'value' => $melhorenvio_district,
                'validates' => [
                    'isEmpty',
                    [
                        'method' => 'isMinMax',
                        'min' => '1',
                        'max' => '64',
                    ]
                ]
            ],
            'melhorenvio_city' => [
                'value' => $melhorenvio_city,
                'validates' => [
                    'isEmpty',
                    [
                        'method' => 'isMinMax',
                        'min' => '1',
                        'max' => '64',
                    ]
                ]
            ]
        ]);

        return $errors;
    }

    public function install()
    {
        $this->load->model('setting/setting');

        $melhorenvioAuthInfo = [
            'melhorenvio_client_id' => Melhorenvio::clientIdFutura,
            'melhorenvio_client_secret' => Melhorenvio::clientSecretFutura
        ];

        $this->model_setting_setting->editSetting('melhorenvio', $melhorenvioAuthInfo);
    }

}
