<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

use application\controllers\ParseJson;

class PaymentApi extends CI_Controller
{
    
     public function __construct()
     {
        parent::__construct();
        $this->load->model('planos_model', 'pm');
     }
    public function index(){
        //echo str_shuffle('FBP32DZQM97U35I1EHZW5R9ABZ4M6LM8');
        die;
//        $options = [ 'cost' => 11, 'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM) ];
//            echo password_hash("luiz_danin@yahoo.com.br", PASSWORD_BCRYPT, $options);
//            die;
            
//        $url = "https://www.aporfia.com.br/ovumpay/api";
        $url = "https://www.ovumpay.com.br/api";
        
//        $data["autenticacao"]["chave"] = "1LFU06VPJI5TG9I1EHZW5R9ABZ4M6LM8";
//        $data["autenticacao"]["token"] = "FBP32DZQM97U35LJIA8TFGGF8Y==";
        $data["autenticacao"]["chave"] = "B6sUfC6dYVcu5a9QKDNUvJq7XVCOIKni";
        $data["autenticacao"]["token"] = "A7E5SHFPN715YV88PW0JTZ7YQ==";
        $data["autenticacao"]["instituicao"] = "CURSOSVIP";

        $data["cliente"]["id"] = "aluno01s";
        $data["cliente"]["nome"] = "joão cardoso";
        $data["cliente"]["email"] = "email@mail.com";
        $data["cliente"]["cpf"] = "93235534253";
        $data["cliente"]["contato"] = "91989998195";
        $data["cliente"]["cep"] = "66078420";
        $data["cliente"]["endereco"] = "tv we 1";
        $data["cliente"]["numero"] = "98";
        $data["cliente"]["complemento"] = "";
        $data["cliente"]["bairro"] = "guamá";
        $data["cliente"]["cidade"] = "belém";
        $data["cliente"]["estado"] = "PA";
        $data["transacao"]["tipo"] = "S";//Simples
        $data["transacao"]["descricao"] = "Compra produto X";
        $data["transacao"]["meiopagamento"] = 'boleto';
        $data["transacao"]["valor"] = "29.9";
        $data["transacao"]["pedido"] = "cursosvip232";

        $data["transacao"]["cartao"]["parcelas"] = "1";
        $data["transacao"]["cartao"]["nometitular"] = "João Cardoso Caldas";
        $data["transacao"]["cartao"]["numerocartao"] = "9999999999999999";
        $data["transacao"]["cartao"]["codigoseguranca"] = "465";
        $data["transacao"]["cartao"]["anovalidade"] = "20";
        $data["transacao"]["cartao"]["mesvalidade"] = "03";
        $data["loja"]["url_retorno"] = base_url()."PaymentApi";
        
        $data = json_encode($data);
        //$parse_json = new ParseJson($data);
        //$this->load->library('ParseJson');
        //$this->ParseJson->jsonSerialize($data);
        
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($ch);
        
        var_dump(json_decode($result,true)); 
    }
    
    private function validar_login()
    {

        if (!isset($_SESSION['imazon']['email']) && !isset($_SESSION['imazon']['status'])):

            redirect('site/login');

        else:

            return true;

        endif;
    }
    
    private function parseToJson(array $dados): string
    {
        $dataJson = json_encode($dados);
        return $dataJson;
    }
    
    private function getIdCliente($id_aluno):string
    {
        if( !empty($id_aluno) )
        {
            $senha = $id_aluno;
            $custo = '10';
            $salt = 'LB9BQIW6D428RMPUFH3319';
            $id_cliente = crypt($senha, '$2a$' . $custo . '$' . $salt . '$');
            $id_cliente_hash = substr($id_cliente, 29, -10);
            return 'CURSOSVIP'.$id_cliente_hash;
        }
    }
    
    private function getcliente()
    {
        //echo '5h6q5sOwHEno0u62mBvHm';
        $this->load->model("Usuarios_model");
        $ids = $this->Usuarios_model->getIdAluno();
        
        foreach ($ids as $id)
        {
            $id = $id['id_aluno'];
            $custo = '10';
            $salt = 'LB9BQIW6D428RMPUFH3319';
            $id_cliente = crypt($id, '$2a$' . $custo . '$' . $salt . '$');
            $id_cliente_hash = substr($id_cliente, 29, -10);
            
            if($id_cliente_hash=='5h6q5sOwHEno0u62mBvHm')
            {
                $idcliente = $id;
                die;
            }
            else
            {
                $idcliente = 'Not';
            }
        }
        echo $idcliente;
        
    }

        private function validateName($nome_portador): bool
    {
        $nome_portador = trim($nome_portador);
        $nome_portador = strip_tags($nome_portador);
        
        if( !empty($nome_portador) )
        {
            $nome_portador = (int)$nome_portador;

            if($nome_portador===0)
            {
                return true;
            }
            return false;
        }
        
        return false;
    }

    
    public function gerarPagamentoCertificado()
    {
        $this->validar_login();

        if (isset($_SESSION['id_pedido']) && count($_SESSION['id_pedido']) == 3) {

            $this->load->library("form_validation");

            //valida��o de dados

            if ( $this->input->post("Forma") == 'BOLETO' )
            {
                $this->form_validation->set_rules("identidade_cpf", "Identidade", "required|min_length[11]|max_length[11]|integer");

                $cpf = $this->input->post('identidade_cpf');

                if (!$this->form_validation->run())
                {
                    unset($_SESSION['atualiza']);

                    redirect("aluno/curso/finalizarPedidoCertificado");
                }
            } else {
                
                
                $this->form_validation->set_rules("identidade_credito", "Identidade", "required|min_length[11]|max_length[11]|integer");

                $this->form_validation->set_rules("TipoCartao", "Tipo de cartao", "required");

                $this->form_validation->set_rules("Forma", "Forma de pagamento", "required|alpha");

                $this->form_validation->set_rules("Parcelas", "Parcelas", "required|integer");

                $this->form_validation->set_rules("CartaoNumero", "N�mero do Cartao", "required|min_length[16]|max_length[22]|integer");

                $this->form_validation->set_rules("NomePortador", "Nome do Portador", "required");

                $this->form_validation->set_rules("Expiracao", "Expiracao", "required");

                $this->form_validation->set_rules("CodigoSeguranca", "Codigo de Seguranca", "required|integer");

                $this->form_validation->set_rules("DataNascimento", "Data de Nascimento", "required");
                
                $is_valid = $this->validateName($this->input->post("NomePortador"));
                
                $expiracao = str_replace("/","",$this->input->post("Expiracao") );
                $expiracao = (int)$expiracao;
                
                $data_nascimento = str_replace("/","",$this->input->post("DataNascimento") );
                $data_nascimento = (int)$data_nascimento;
                
                $forma = (int)$this->input->post("Forma");
                
                $cpf = $this->input->post('identidade_credito');
                
                if ( (!$this->form_validation->run()) || (!$is_valid) || ($expiracao===0) || ($data_nascimento===0) || ($forma!==0) )
                {
                    unset($_SESSION['atualiza']);

                    redirect("aluno/curso/finalizarPedidoCertificado");
                }
                
            }

            $certificado = array('email' => $_SESSION['email_aluno'], 'pedido' => $_SESSION['id_pedido']['pedido'] . date("H"), 'dt_cadastro' => date('Y-m-d H:i:s'), 'tipo_pagamento' => $this->input->post("Forma"), 'status' => 0, 'pagamento' => 0, 'curso' => $_SESSION['id_pedido']['curso'], 'historico' => decodifica($_SESSION['id_pedido']['historico']));

            $this->load->model("Certificados_model", "certm");
            
            if ($this->certm->add_certificado_impresso($certificado))
            {

            $this->load->model('usuarios_model', 'um');
            $aluno = $this->um->get_by_id_fic($_SESSION['email_aluno'])->result();
            
            $Forma = $this->input->post('Forma');
            
            $parcelas = $this->input->post('Parcelas');
            
            if($parcelas == NULL)
            {
                $parcelas = '1';
            }
            
            if($aluno[0]->ddd_celular && $aluno[0]->celular)
            {
                $TelefoneFixo = $aluno[0]->ddd_celular . $aluno[0]->celular;
            }
            else if($aluno[0]->ddd_telefone && $aluno[0]->telefone)
            {
                $TelefoneFixo = $aluno[0]->ddd_telefone . $aluno[0]->telefone;
            }
            
                $expiracao = $this->input->post('Expiracao');
                
                if ($expiracao == '')
                {
                    $expiracao = "00/00";
                }

                $ext = explode("/", $expiracao);

                $mesvalidade = $ext[0];

                $anovalidade = $ext[1];
                
                $descricao = 'compra certificado impresso do curso' . $_SESSION['id_pedido']['curso'];
                
                $id_cliente = $this->getIdCliente($aluno[0]->id_aluno);
                
                //$url = "https://www.aporfia.com.br/ovumpay/api";
                $urlPost = "https://www.ovumpay.com.br/api";

                //$data["autenticacao"]["chave"] = "1LFU06VPJI5TG9I1EHZW5R9ABZ4M6LM8";
                //$data["autenticacao"]["token"] = "FBP32DZQM97U35LJIA8TFGGF8Y==";
                $data["autenticacao"]["chave"] = "B6sUfC6dYVcu5a9QKDNUvJq7XVCOIKni";
                $data["autenticacao"]["token"] = "A7E5SHFPN715YV88PW0JTZ7YQ==";
                $data["autenticacao"]["instituicao"] = "CURSOSVIP";
                $data["cliente"]["id"] = $id_cliente;
                $data["cliente"]["nome"] = $aluno[0]->nome;
                $data["cliente"]["email"] = $aluno[0]->email;
                $data["cliente"]["cpf"] = $cpf;
                $data["cliente"]["contato"] = $TelefoneFixo;
                $data["cliente"]["cep"] = $aluno[0]->cep;
                $data["cliente"]["endereco"] = $aluno[0]->endereco;
                $data["cliente"]["numero"] = $aluno[0]->numero;
                $data["cliente"]["complemento"] = $aluno[0]->complemento;
                $data["cliente"]["bairro"] = $aluno[0]->bairro;
                $data["cliente"]["cidade"] = $aluno[0]->cidade;
                $data["cliente"]["estado"] = $aluno[0]->estado;;
                $data["transacao"]["tipo"] = "S";//Simples
                $data["transacao"]["descricao"] = $descricao;
                $data["transacao"]["meiopagamento"] = $this->input->post('Forma');
                $data["transacao"]["valor"] = "39.99";
                $data["transacao"]["pedido"] = $_SESSION['id_pedido']['pedido'] . date("H");
                $data["transacao"]["cartao"]["parcelas"] = $parcelas;
                $data["transacao"]["cartao"]["nometitular"] = $this->input->post('NomePortador');
                $data["transacao"]["cartao"]["numerocartao"] = $this->input->post('CartaoNumero');
                $data["transacao"]["cartao"]["codigoseguranca"] = $this->input->post('CodigoSeguranca');
                $data["transacao"]["cartao"]["anovalidade"] = $anovalidade;
                $data["transacao"]["cartao"]["mesvalidade"] = $mesvalidade;
                $data["loja"]["url_retorno"] = base_url()."PaymentReturnApi/listenReturnCertificado";
                
                $dataJson = $this->parseToJson($data);
                
                $ch = curl_init($urlPost);
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
                curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                $result = curl_exec($ch);

                $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

                curl_close($ch);
                
                if ($httpCode != "200")
                {

                    $result = json_decode($result, true);

                    $merror = utf8_decode($result['mensagem']);

                    print utf8_encode("<script>alert('Transacao Recusada. $merror!')</script>");

                    print utf8_decode("<script>window.location.href = '/aluno/curso/cursos_matriculados';</script>");
                }
                else
                {
                    $result = json_decode($result, true);
                    
                    if($result['situacao']=='Sucesso')
                    {
                    
                        $transa = $result['transacao'];

                        $link = $result['url_pagamento'];

                        $mensagem = utf8_decode($result['mensagem']);

                        $status_mensagem = $result['mensagem'];
                        $status = $result['status'];

                        if ($Forma == 'BOLETO' && $link != '')
                        {
                            print utf8_decode("<script> window.location.href = '$link' ;</script>");
                        }
                        else if ($Forma != 'BOLETO' && $result['situacao'] != 'Falha')
                        {
                            $transacao_pedido = codifica( $_SESSION['id_pedido']['pedido'] . date("H") );
                            $transacao_email_cliente = codifica($aluno[0]->id_fic);
                            $transacao = codifica($transa);
                            
                            redirect('PaymentApi/recibo/' . $transacao_pedido.'/'. $transacao_email_cliente.'/'.$transacao);
                        }
                    }
                    else
                    {
                       print utf8_encode("<script>alert('Transacao Recusada.".utf8_decode($result['mensagem'])." !')</script>");
                       print utf8_decode("<script>location.reload();</script>");
                    }
                }

                unset($_SESSION['id_pedido']);
            }
            else
            {
                redirect("aluno/curso/cursos_matriculados");
            }
        } else {

            redirect("aluno/curso/cursos_matriculados");
        }
    }
    
    public function recibo($transacao_pedido, $transacao_email_cliente, $transacao)
    {
        $this->load->view('area_aluno/inc/header');
        
        $transacao_pedido;
        $transacao_email_cliente;
        
        $this->load->model('certificados_model', 'cm');
        $certificado_pagamento = $this->cm->get_status_pagamento($transacao_pedido, $transacao_email_cliente);
        
        $pagamento = $certificado_pagamento[0]['pagamento'];
        $tipo_pagamento = $certificado_pagamento[0]['tipo_pagamento'];
        
        $d['pagamento'] = $pagamento;
        $d['tipo_pagamento'] = $tipo_pagamento;
        $d['pedido'] = $transacao_pedido;
        $d['email'] = $transacao_email_cliente;
        $d['transacao'] = $transacao;
        
        $this->load->view('area_aluno/tela/transacao_cartao_sucesso_ovum', $d);
        
        $this->__footer();
    }
    
    private function __footer() {

        $this->validar_login();

        $this->load->view('modal-site/modal-login');

        $this->load->view('site/inc/footer');

    }
    
    public function recibo_credito($transacao_id)
    {
        $this->load->view('area_aluno/inc/header');
        
        $transacao_id = decodifica($transacao_id);
        
        $this->load->model('transacao_model', 'tr');
        $transacao = $this->tr->get_transacao_by_trancacao($transacao_id);
        
        $d['tipo_pagamento'] = $transacao[0]['tipo_pagamento'];
        $d['pagamento'] = $transacao[0]['situacao'];
        $d['transacao'] = codifica($transacao_id);
        $d['plano'] = 'plano';
        
        $this->load->view('area_aluno/tela/transacao_cartao_sucesso_ovum', $d);
        
        $this->__footer();
    }

    public function geraPagamentoPlano()
    {
        
        
        $this->load->library("form_validation");

            //valida��o de dados

            if ( $this->input->post("Forma") == 'BOLETO' )
            {
                $this->form_validation->set_rules("identidade_cpf", "Identidade", "required|min_length[11]|max_length[11]|integer");

                $cpf = $this->input->post('identidade_cpf');

                if (!$this->form_validation->run())
                {
                    redirect("aluno/financeiro/pedido");
                }
            } else {
                
                
                $this->form_validation->set_rules("identidade_credito", "Identidade", "required|min_length[11]|max_length[11]|integer");

                $this->form_validation->set_rules("TipoCartao", "Tipo de cartao", "required");

                $this->form_validation->set_rules("Forma", "Forma de pagamento", "required|alpha");

                $this->form_validation->set_rules("Parcelas", "Parcelas", "required|integer");

                $this->form_validation->set_rules("CartaoNumero", "N�mero do Cartao", "required|min_length[16]|max_length[22]|integer");

                $this->form_validation->set_rules("NomePortador", "Nome do Portador", "required");

                $this->form_validation->set_rules("Expiracao", "Expiracao", "required");

                $this->form_validation->set_rules("CodigoSeguranca", "Codigo de Seguranca", "required|integer");

                $this->form_validation->set_rules("DataNascimento", "Data de Nascimento", "required");
                
                $is_valid = $this->validateName($this->input->post("NomePortador"));
                
                $expiracao = str_replace("/","",$this->input->post("Expiracao") );
                $expiracao = (int)$expiracao;
                
                $data_nascimento = str_replace("/","",$this->input->post("DataNascimento") );
                $data_nascimento = (int)$data_nascimento;
                
                $forma = (int)$this->input->post("Forma");
                
                $cpf = $this->input->post('identidade_credito');
                
                if ( (!$this->form_validation->run()) || (!$is_valid) || ($expiracao===0) || ($data_nascimento===0) || ($forma!==0) )
                {
                    unset($_SESSION['atualiza']);

                    redirect("aluno/financeiro/pedido");
                }
                
            }
        
        
        
        $transacao = $_SESSION['codigo_transacao'];

        $this->load->model('usuarios_model', 'um');
        $aluno = $this->um->get_by_id_fic($_SESSION['email_aluno'])->result();


        $this->load->model('transacao_model', 'tm');
        $transacao = $this->tm->get_by_id($transacao, $_SESSION['email_aluno']);

        $Nome = $aluno[0]->nome;



        $tipo = $transacao[0]->tipo;

        $tipoplano = $transacao[0]->cod_plano;

        $nome_plano = $this->tm->getNomePlanoById($tipoplano);

        if ($tipo == 1) {
//            $descricao = "COMPRA DO PLANO " . $tipoplano;
            $descricao = "Compra do " . $nome_plano[0]['nome'];

        } else {

            $descricao = "";//"Fatura de Compra de Documentos Amaz�nia Cursos";

        }


        $Email = $aluno[0]->email;

        $valor = number_format($transacao[0]->valor / 100, 2, ".", ".");

        $idtransacao = $_SESSION['codigo_transacao'];

        $IdPagador = $aluno[0]->id_aluno;

        $sexo = $this->input->post('sexo');

        $cpf = $cpf;

        $nascimento = $this->input->post('DataNascimento');

        $Logradouro = $aluno[0]->endereco;

        $NumeroCasa = $aluno[0]->numero;

        $Complemento = $aluno[0]->complemento;

        $Bairro = $aluno[0]->bairro;

        $Cidade = $aluno[0]->cidade;

        $Estado = $aluno[0]->estado;

        $Cep = $aluno[0]->cep;
        
        /*
         *Alteração para solucionar problema de numero de telefone invalido 
         */
        if($aluno[0]->ddd_celular && $aluno[0]->celular)
        {
            $TelefoneFixo = $aluno[0]->ddd_celular . $aluno[0]->celular;
        }
        else if($aluno[0]->ddd_telefone && $aluno[0]->telefone)
        {
            $TelefoneFixo = $aluno[0]->ddd_telefone . $aluno[0]->telefone;
        }
//        $TelefoneFixo = $aluno[0]->ddd_telefone . $aluno[0]->telefone;

        $Forma = $this->input->post('Forma');
        /*
         * Alteração para solucionar problema de numero de parcelas na opção de pagamento boleto
         */
        $parcelas = $this->input->post('Parcelas');
        
        if($parcelas == NULL)
        {
            $parcelas = '1';
        }
        
        $numerocartao = $this->input->post('CartaoNumero');

        $Expiracao = $this->input->post('Expiracao');

        $CodigoSeguranca = $this->input->post('CodigoSeguranca');

        $NomePortador = $this->input->post('NomePortador');

        $DataNascimento = $this->input->post('DataNascimento');

        if ($Expiracao == '') {

            $Expiracao = "00/00";

        }

        $ext = explode("/", $Expiracao);

        $mesvalidade = $ext[0];

        $anovalidade = $ext[1];

        //
        
        $id_cliente = $this->getIdCliente($aluno[0]->id_aluno);
                
        //$url = "https://www.aporfia.com.br/ovumpay/api";
        $urlPost = "https://www.ovumpay.com.br/api";

        //$data["autenticacao"]["chave"] = "1LFU06VPJI5TG9I1EHZW5R9ABZ4M6LM8";
        //$data["autenticacao"]["token"] = "FBP32DZQM97U35LJIA8TFGGF8Y==";
        $data["autenticacao"]["chave"] = "B6sUfC6dYVcu5a9QKDNUvJq7XVCOIKni";
        $data["autenticacao"]["token"] = "A7E5SHFPN715YV88PW0JTZ7YQ==";
        $data["autenticacao"]["instituicao"] = "CURSOSVIP";
        $data["cliente"]["id"] = $id_cliente;
        $data["cliente"]["nome"] = $aluno[0]->nome;
        $data["cliente"]["email"] = $aluno[0]->email;
        $data["cliente"]["cpf"] = $cpf;
        $data["cliente"]["contato"] = $TelefoneFixo;
        $data["cliente"]["cep"] = $aluno[0]->cep;
        $data["cliente"]["endereco"] = $aluno[0]->endereco;
        $data["cliente"]["numero"] = $aluno[0]->numero;
        $data["cliente"]["complemento"] = $aluno[0]->complemento;
        $data["cliente"]["bairro"] = $aluno[0]->bairro;
        $data["cliente"]["cidade"] = $aluno[0]->cidade;
        $data["cliente"]["estado"] = $aluno[0]->estado;;
        $data["transacao"]["tipo"] = "S";//Simples
        $data["transacao"]["descricao"] = $descricao;
        $data["transacao"]["meiopagamento"] = $this->input->post('Forma');
        $data["transacao"]["valor"] = $valor;
        $data["transacao"]["pedido"] = $_SESSION['codigo_transacao'];
        $data["transacao"]["cartao"]["parcelas"] = $parcelas;
        $data["transacao"]["cartao"]["nometitular"] = $this->input->post('NomePortador');
        $data["transacao"]["cartao"]["numerocartao"] = $this->input->post('CartaoNumero');
        $data["transacao"]["cartao"]["codigoseguranca"] = $this->input->post('CodigoSeguranca');
        $data["transacao"]["cartao"]["anovalidade"] = $anovalidade;
        $data["transacao"]["cartao"]["mesvalidade"] = $mesvalidade;
        $data["loja"]["url_retorno"] = base_url()."PaymentReturnApi/listenReturnPlano";
                
        $dataJson = $this->parseToJson($data);
                
        $ch = curl_init($urlPost);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($ch);

        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        curl_close($ch);
        //
        //var_dump('transacao: '.$_SESSION['codigo_transacao'].' result: '.$result);
        //die;

        if ($httpCode != "200")
                {

                    $result = json_decode($result, true);

                    $merror = utf8_decode($result['mensagem']);

                    print utf8_encode("<script>alert('Transacao Recusada. $merror!')</script>");

                    print utf8_decode("<script>window.location.href = '/aluno/curso/cursos_matriculados';</script>");
                }
                else
                {
                    $result = json_decode($result, true);
                    
                    if($result['situacao']=='Sucesso')
                    {
                    
                        $transa = $result['transacao'];

                        $link = $result['url_pagamento'];

                        $mensagem = utf8_decode($result['mensagem']);

                        $status_mensagem = $result['mensagem'];
                        $status = $result['status'];

                        if ($Forma == 'BOLETO' && $link != '')
                        {
                            print utf8_decode("<script> window.location.href = '$link' ;</script>");
                        }
                        else if ($Forma != 'BOLETO' && $result['situacao'] != 'Falha')
                        {
                            //$transacao_pedido = codifica( $_SESSION['id_pedido']['pedido'] . date("H") );
                            //$transacao_email_cliente = codifica($aluno[0]->id_fic);
                            $transacao = codifica($idtransacao);
                            
                            redirect('PaymentApi/recibo_credito/' .$transacao);
                        }
                    }
                    else
                    {
                       print utf8_encode("<script>alert('Transacao Recusada.".utf8_decode($result['mensagem'])." !')</script>");
                       print utf8_decode("<script>window.location.href = '../aluno/financeiro/pedido' ;</script>");
                    }
                }
    }
}
