<?php
//Hugo: 22/10/2015- comunica��o com webservice gera parcela pagseguro
/*include_once 'catalog/controller/payment/PagSeguroLibrary/PagSeguroLibrary.php';*/

class pagseguro
{
    private $config;
    private $session;
    private $db;
    private $registry;

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

        if (!$this->config->get('pagseguro_status')){
            return false;
        }

        $this->db = $registry->get('db');
        $this->session = $registry->get('session');
        $this->registry = $registry;
    }

    public function ConsultaParcela($url, $post = NULL, array $header = array())
    {

        try {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_URL, $url);

            if (count($header) > 0) {
                curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
            }

            if ($post !== null) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
            }

            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_TIMEOUT, 300);
            $data = curl_exec($ch);
            $erro = curl_error($ch) . ' - Code: ' . curl_errno($ch);
            curl_close($ch);

            if ($data == 'Unauthorized') {
                $logData = [
                    'tag'      => '[' . get_class($this) . ']',
                    'event'    => 'pagseguro_error',
                    'message'  => 'Erro de Autenticacao EMAIL/TOKEN do PagSeguro, validado no construtor do system/library/pagseguro; Necessario verificar as configuracoes do token e do email no modulo.',
                    'data' => $data
                ];
                $this->setLogError($logData);
                return false;
            } else {
                return $data;
            }

        } catch (Exception $e) {

        }
    }

    public function getFator()
    {
        if ($this->config->get('pagseguro_parcela')) {

            $user = $this->config->get('pagseguro_email');
            $token = $this->config->get('pagseguro_token');

            $bandeira = 'visa';
            $vlProduto = '1000.00';
            $request = 'https://ws.pagseguro.uol.com.br/v2/installments?email=' . $user . '&token=' . $token . '&amount=' . $vlProduto . '&cardBrand=' . $bandeira;


            $resultado = $this->ConsultaParcela($request);
            $resultado = simplexml_load_string($resultado);

            if ($resultado) {
                $fator = array();

                for ($i = 0; $i < sizeof($resultado); $i++) {
                    $fator[$i] = (strval($resultado->installment[$i]->amount) / $vlProduto);
                }

                $FatorPerfil = array();
                for ($i = 12; $i >= 1; $i--) {
                    $FatorPerfil[$i] = $fator;
                    array_pop($fator);
                }
                $FatorPerfil = serialize($FatorPerfil);

                return $FatorPerfil;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public function getPerfil($vlProduto)
    {
        if ($this->config->get('pagseguro_status')){

            $FatorPerfil = $this->getFator();

            if ($FatorPerfil){
                $FatorPerfil = unserialize($FatorPerfil);

                $vlmin = 4.9999; //4.99992 pq ele arredonda para 5

                for ($l = 11; $l >= 0; $l--) {
                    if (((float)$FatorPerfil[12][$l] * (float)$vlProduto) >= $vlmin) {
                        break;
                    } elseif (($l == 0) && ($vlProduto < $vlmin)) break;
                }
                return $FatorPerfil[$l + 1];
            } else {
                return false;
            }
        } else {
            return false;
        }

    }

    public function ConsultarPedidosAbandonados($url)
    {

        try {

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_URL, $url);

            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_TIMEOUT, 300);
            $data = curl_exec($ch);
            $erro = curl_error($ch) . ' - Code: ' . curl_errno($ch);
            curl_close($ch);


            try{

                if ($data == 'Unauthorized') {
                    throw new Exception('Erro de Autenticacao EMAIL/TOKEN do PagSeguro, validado no construtor do system/library/pagseguro; Necessario verificar as configuracoes do token e do email no modulo.');
                } else {
                     return simplexml_load_string($data);
                }
            } catch (Exception $e){
                $logData = [
                    'tag'      => '[' . get_class($this) . ']',
                    'event'    => 'pagseguro_error',
                    'message'  => 'Erro ao conectar com o PagSeguro',
                    'data' => $data,
                    'exception'=> [
                        'type'    => get_class($e),
                        'message' => $e->getMessage(),
                        'code'    => $e->getCode(),
                        'file'    => $e->getFile(),
                        'line'    => $e->getLine(),
                        'trace'   => $e->getTraceAsString()
                    ],
                ];
                $this->setLogError($logData);
                throw $e;
            }

        } catch (Exception $e) {
            $logData = [
                'tag'      => '[' . get_class($this) . ']',
                'event'    => 'pagseguro_error',
                'message'  => 'Erro ao conectar com o PagSeguro',
                'exception'=> [
                    'type'    => get_class($e),
                    'message' => $e->getMessage(),
                    'code'    => $e->getCode(),
                    'file'    => $e->getFile(),
                    'line'    => $e->getLine(),
                    'trace'   => $e->getTraceAsString()
                ],
            ];
            $this->setLogError($logData);
            return false;
        }

    }

    private function setLogError($logData){
        $log = new Log('payment_error.txt');
        $log->write(json_encode($logData, JSON_UNESCAPED_UNICODE));
    }
}
