<?php


class kangu extends RestApi
{
    const urlApiTeste = 'https://sandbox.kangu.com.br/tms/transporte';
    const urlApi = 'https://portal.kangu.com.br/tms/transporte';

    private $header;

    private $environment;
    private $accessToken = null;

    public function __construct($registry)
    {
        $this->registry = $registry;
        $this->load = $registry->get('load');
        $this->config = $registry->get('config');
        $this->db = $registry->get('db');
        $this->log = $registry->get('log');
        $this->session = $registry->get('session');

        $this->setEnvironment();
        $this->setHeader();

    }


    public function setHeader($json = '')
    {
        $this->header = array(
            'Content-Type:application/x-www-form-urlencoded',
            "token: {$this->accessToken}",
            'Content-Length: ' . strlen($json)
        );
    }

    public function getHeader()
    {
        return $this->header;
    }

    public function getAccess()
    {
        if ($this->config->get('kangu_status') == Type_Status::Tp_Habilitado) {
            $this->accessToken = trim($this->config->get('kangu_token'));
        }
    }

    public function setEnvironment()
    {
        if ($this->config->get('kangu_environment') == Type_Environment::Tp_Production) {
            $this->environment = self::urlApi;
        } else {
            $this->environment = self::urlApiTeste;
        }
    }

    public function getEnvironment()
    {
        return $this->environment;
    }

    public function getQuote($dataSend)
    {
        $this->getAccess();
        $this->setHeader($dataSend);
        $header = $this->getHeader();
        $url = $this->getEnvironment() . '/simular';

        $data = parent::callAPI($url, 'POST', $dataSend, $header, false, $retorno);

        if ($data) {
            switch ($retorno) {
                case '200':
                    return $data;
                    break;
                case '401':
                case '403':
                    $error = 'Erro ao carregar módulo Kangu:';
                    is_array($data->message) ? $dataerror = $data->message[0] : $dataerror = $data->message;
                    $error .= 'Código HTTP: ' . $retorno;
                    $error .= 'Mensagem: ' . $dataerror;
                    throw new exception($error);
                    break;
                default :
                    $error = 'Erro ao carregar módulo Kangu:';
                    $error .= 'Mensagem: Erro na conexão com o Kangu';
                    throw new exception($error);
            }
        } else {
            $error = 'Error ao carregar módulo Kangu:';
            $error .= 'Mensagem: Erro na conexão com o Kangu';
            throw new exception($error);
        }

        return $data;
    }

    function postCollectionRequest($dataSend){
        $this->getAccess();
        $this->setHeader($dataSend);
        $header = $this->getHeader();
        $url = $this->getEnvironment() . '/solicitar';

        $data = parent::callAPI($url, 'POST', $dataSend, $header, false, $retorno);

        if ($data) {
            switch ($retorno) {
                case '500':
                case '200':
                    return $data;
                    break;
                case '401':
                case '403':
                    $error = 'Erro ao carregar módulo Kangu:';
                    is_array($data->message) ? $dataerror = $data->message[0] : $dataerror = $data->message;
                    $error .= 'Código HTTP: ' . $retorno;
                    $error .= 'Mensagem: ' . $dataerror;
                    throw new exception($error);
                    break;
                default :
                    $error = 'Erro ao carregar módulo Kangu:';
                    $error .= 'Mensagem: Erro na conexão com o Kangu';
                    throw new exception($error);
            }
        } else {
            $error = 'Error ao carregar módulo Kangu:';
            $error .= 'Mensagem: Erro na conexão com o Kangu';
            throw new exception($error);
        }

        return $data;
    }

}