<?php

class ConfirmaDados_OPAY extends CI_Controller {

    function __construct() {

        parent::__construct();
        $this->load->model('Cadastro_Model');
        $this->load->model('Cursos_Model');
        $this->load->library('Criptografia');
        $this->load->library('Sanitize');
        $this->load->database();
    }

    public function confirmaendereco() {

        if (isset($_SESSION['aluno']) == TRUE) {
            $id = $_SESSION['aluno']['id_aluno'];
            $aluno = $this->Cadastro_Model->getAlunoPorID($id);
            $estados = array(
                'PA' => 'Pará',
                'AC' => 'Acre',
                'AL' => 'Alagoas',
                'AP' => 'Amapá',
                'AM' => 'Amazonas',
                'BA' => 'Bahia',
                'CE' => 'Ceará',
                'DF' => 'Distrito Federal',
                'ES' => 'Espírito Santo',
                'GO' => 'Goiás',
                'MA' => 'Maranhão',
                'MT' => 'Mato Grosso',
                'MS' => 'Mato Grosso do Sul',
                'MG' => 'Minas Gerais',
                'PB' => 'Paraíba',
                'PR' => 'Paraná',
                'PE' => 'Pernambuco',
                'PI' => 'Piauí',
                'RJ' => 'Rio de Janeiro',
                'RN' => 'Rio Grande do Norte',
                'RS' => 'Rio Grande do Sul',
                'RO' => 'Rondônia',
                'RR' => 'Roraima',
                'SC' => 'Santa Catarina',
                'SP' => 'São Paulo',
                'SE' => 'Sergipe',
                'TO' => 'Tocantins'
            );
            $dados = array('descricao' => '','estados' => $estados, 'termos' => $this->Cadastro_Model->obtemTermo(), 'titulo' => 'Confirmação de Endereço', 'erro_conf' => NULL, 'aluno' => $aluno);
            $this->load->view('confirmaendereco', $dados);
        } else {
            redirect();
        }
    }

    public function confirmacao() {

        $_POST = $this->sanitize->filter($this->input->post());

        $data = array(
            'ddd' => $this->input->post('ddd_celular', TRUE), 'telefone' => $this->input->post('celular', TRUE), 'cep' => str_replace('-', '', $this->input->post('cep', TRUE)), 'endereco' => $this->input->post('endereco', TRUE), 'numero' => $this->input->post('numero', TRUE), 'complemento' => $this->input->post('complemento', TRUE), 'bairro' => $this->input->post('bairro', TRUE), 'cidade' => $this->input->post('cidade', TRUE), 'estado' => $this->input->post('estado', TRUE)
        );

        $this->form_validation->set_rules('ddd_celular', 'ddd', 'trim|required|min_length[2]|max_length[2]', array('required' => 'O DDD está em branco'));
        $this->form_validation->set_rules('celular', 'celular', 'trim|required|min_length[9]|max_length[9]', array('required' => 'O celular está em branco'));
        $this->form_validation->set_rules('cep', 'Cep', 'trim|required', array('required' => 'O seu cep está em branco'));
        $this->form_validation->set_rules('endereco', 'endereco', 'trim|required', array('required' => 'O seu endereço está em branco'));
        $this->form_validation->set_rules('numero', 'número', 'trim|required|alpha_numeric', array('required' => 'O seu número está em branco'));
        $this->form_validation->set_rules('bairro', 'bairro', 'trim|required', array('required' => 'O seu bairro está em branco'));
        $this->form_validation->set_rules('cidade', 'cidade', 'trim|required', array('required' => 'A sua cidade está em branco'));
        $this->form_validation->set_rules('estado', 'estado', 'trim|required|min_length[2]|max_length[2]', array('required' => 'O seu estado está em branco'));

        if ($this->form_validation->run() == FALSE) {
            $form = validation_errors('<div class="alert alert-warning alert-conf" role="alert"><div class=""> <i class="fa fa-info-circle"></i> <span> ', ' </span> </div> </div>');
            $id = $_SESSION['aluno']['id_aluno'];
            $aluno = $this->Cadastro_Model->getAlunoPorID($id);
            $dados = array('termos' => $this->Cadastro_Model->obtemTermo(), 'titulo' => 'Confirmação de Endereço', 'erro_conf' => $form, 'aluno' => $aluno);
            $this->load->view('confirmaendereco', $dados);
        } else {

            // VALIDA O CEP

            $valida = $this->buscar_cep($data['cep']);

            if ($valida['sucesso'] == 1) {

                $this->Cadastro_Model->autalizadadoscadastrais($data);

                if (isset($_SESSION['prova-confirma']) == FALSE) {

                    //gera transação
                    $result = $this->gera_transacao();

                    if (isset($_SESSION["total_carrinho"]) == TRUE) {
                        $dados = array(
                            'id_cliente' => $_SESSION['aluno']['id_aluno'],
                            'nome' => $_SESSION['aluno']['nome'],
                            'email' => $_SESSION['aluno']['email'],
                            'descricao' => $this->descricao(),
                            'valor' => $_SESSION["total_carrinho"],
                            'transacao' => $this->session->userdata("id_transacao")
                        );
                    } else {
                        $dados = array(
                            'id_cliente' => $_SESSION['aluno']['id_aluno'],
                            'nome' => $_SESSION['aluno']['nome'],
                            'email' => $_SESSION['aluno']['email'],
                            'descricao' => $this->descricao(),
                            'valor' => $this->cart->total(),
                            'transacao' => $this->session->userdata("id_transacao")
                        );
                    }
                    $_SESSION['dados'] = $dados;

                    /*
                     * Verifica se a transação foi inserida na base
                     */
                    if (!empty($result)) {
                        $result_transp = $this->gera_fatura_ovumpay($dados);

                        /*
                         * Verifica se gerou transação na ovum pay
                         */
                        if ($result_transp != false) {
                            $this->cart->destroy();
                            $this->session->unset_userdata("total_carrinho");
                            $this->session->set_userdata("codigo_opayt", $result_transp);
                            redirect('finalizarpedido');
                        } else {
                            redirect('cursosmatriculados');
                        }
                    } else {
                        redirect('cursosmatriculados');
                    }
                } else {

                    redirect('prova/' . $_SESSION['prova-confirma']['prova']);
                }
            } else {
                $this->session->set_flashdata('prova-erro', '<div class="alert alert-warning alert-conf" role="alert"><i class="fa fa-info-circle"></i> Formato de CEP inválido. Por favor verifique os seus dados</div>');
                redirect('confirmaendereco');
            }
        }
    }

    public function gera_transacao() {
        $this->load->model('Pagamento_Model');

        $codigo = $this->Pagamento_Model->gera_hash();
        $this->session->set_userdata("id_transacao", $codigo);

        if (isset($_SESSION["total_carrinho"]) == TRUE) {
            $dados = array(
                'id_transacao' => $codigo,
                'data_transacao' => date('Y-m-d'),
                'situacao' => 0,
                'tipopagamento' => 0,
                'valor' => $_SESSION["total_carrinho"],
                'id_aluno' => $_SESSION['aluno']['id_aluno'],
                'certificado' => 0,
                'data_envio' => '0000-00-00',
                'tipo' => 'CE'
            );
        } else {
            $dados = array(
                'id_transacao' => $codigo,
                'data_transacao' => date('Y-m-d'),
                'situacao' => 0,
                'tipopagamento' => 0,
                'valor' => $this->cart->total(),
                'id_aluno' => $_SESSION['aluno']['id_aluno'],
                'certificado' => 0,
                'data_envio' => '0000-00-00',
                'tipo' => 'CE'
            );
        }

        $this->Pagamento_Model->inseretransacao($dados);

        $id_transacao = $_SESSION['id_transacao'];

        $this->Pagamento_Model->item_transacao($id_transacao);
        $this->Pagamento_Model->log_transacao($id_transacao);
        return $this->Pagamento_Model->recuperatransacao($id_transacao);
    }

    /*
     * Geração de fatura na ovumpay
     */

    public function gera_fatura_ovumpay($dados) {
        //        $dados = array(
        //            'id_cliente'=>'875456',
        //            'nome'=>'Jjoao Da Silva',
        //            'email'=>'joaodasilva@mail.com',
        //            'descicao'=>'Teste de págamento',
        //            'valor'=>'199.90',
        //            'transacao'=>'ketmhy4ryu',
        //            
        //        );
        $url = OPAYT_URL;

        $data["autenticacao"]["chave"] = OPAYT_CHAVE;
        $data["autenticacao"]["token"] = OPAYT_TOKEN;

        $data["cliente"]["id"] = $dados['id_cliente'];
        $data["cliente"]["nome"] = $dados['nome'];
        $data["cliente"]["email"] = $dados['email'];

        $data["transacao"]["tipo"] = "S";
        $data["transacao"]["descricao"] = $dados['descricao'];
        $data["transacao"]["valor"] = $dados['valor'];
        $data["transacao"]["pedido"] = $dados['transacao'];
        $data["loja"]["url_retorno"] = base_url('retorno_transparente'. (isset($_SESSION['ovl_code']) ? "?ovl_code=$_SESSION[ovl_code]" : ''));

        $data = json_encode($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);
        $result_decode = json_decode($result);

        if ($result_decode->situacao == 'Sucesso') {
            return $result_decode->dados[0]->identificador;
        } else {
            return false;
        }
    }

    public function descricao() {

        $certificados = '';
        foreach ($this->cart->contents() as $items) {
            $certificados .= $items['name'] . ', ';
        }
        $regra = substr($certificados, 0, -2);
        $descricao = 'CURSOS ' . $regra;

        return $descricao;
    }

    public function confirmacao_old() {

        $_POST = $this->sanitize->filter($this->input->post());

        $data = array(
            'ddd' => $this->input->post('ddd_celular', TRUE), 'telefone' => $this->input->post('celular', TRUE), 'cep' => str_replace('-', '', $this->input->post('cep', TRUE)), 'endereco' => $this->input->post('endereco', TRUE), 'numero' => $this->input->post('numero', TRUE), 'complemento' => $this->input->post('complemento', TRUE), 'bairro' => $this->input->post('bairro', TRUE), 'cidade' => $this->input->post('cidade', TRUE), 'estado' => $this->input->post('estado', TRUE)
        );

        $this->form_validation->set_rules('ddd_celular', 'ddd', 'trim|required|min_length[2]|max_length[2]', array('required' => 'O DDD está em branco'));
        $this->form_validation->set_rules('celular', 'celular', 'trim|required|min_length[9]|max_length[9]', array('required' => 'O celular está em branco'));
        $this->form_validation->set_rules('cep', 'Cep', 'trim|required', array('required' => 'O seu cep está em branco'));
        $this->form_validation->set_rules('endereco', 'endereco', 'trim|required', array('required' => 'O seu endereço está em branco'));
        $this->form_validation->set_rules('numero', 'número', 'trim|required', array('required' => 'O seu número está em branco'));
        $this->form_validation->set_rules('bairro', 'bairro', 'trim|required', array('required' => 'O seu bairro está em branco'));
        $this->form_validation->set_rules('cidade', 'cidade', 'trim|required', array('required' => 'A sua cidade está em branco'));
        $this->form_validation->set_rules('estado', 'estado', 'trim|required|min_length[2]|max_length[2]', array('required' => 'O seu estado está em branco'));

        if ($this->form_validation->run() == FALSE) {
            $form = validation_errors('<div class="alert alert-warning alert-conf" role="alert"><div class=""> <i class="fa fa-info-circle"></i> <span> ', ' </span> </div> </div>');
            $id = $_SESSION['aluno']['id_aluno'];
            $aluno = $this->Cadastro_Model->getAlunoPorID($id);
            $dados = array('termos' => $this->Cadastro_Model->obtemTermo(), 'titulo' => 'Confirmação de Endereço', 'erro_conf' => $form, 'aluno' => $aluno);
            $this->load->view('confirmaendereco', $dados);
        } else {

            $this->Cadastro_Model->autalizadadoscadastrais($data);

            redirect('finalizarpedido');
        }
    }

    public function buscar_cep($cep) {

        $ch = curl_init();

        //desenvolvimento
        //Chaves de acesso à API enviadas via POST
        $post = array(
            "token" => CEP_TOKEN,
            "chave" => CEP_CHAVE,
            "nome_instituicao" => "AMAZONIACURSOS",
            "cep" => $cep
        );
        curl_setopt($ch, CURLOPT_URL, CEP_URL);

        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $requisicao = json_decode(curl_exec($ch));
        curl_close($ch);


        if (isset($requisicao->status) && $requisicao->status == 200) {
            return array("sucesso" => 1, "data" => $requisicao->response);
        } else {
            return array("sucesso" => 0, "data" => null);
        }
    }

    public function geraTransacao() {

        if (isset($_SESSION['prova-confirma']) == FALSE) {
            
            //GERA A TRANSAÇÃO
            
            $result = $this->gera_transacao();

            if (isset($_SESSION["total_carrinho"]) == TRUE) {
                $dados = array(
                    'id_cliente' => $_SESSION['aluno']['id_aluno'],
                    'nome' => $_SESSION['aluno']['nome'],
                    'email' => $_SESSION['aluno']['email'],
                    'descricao' => $this->descricao(),
                    'valor' => $_SESSION["total_carrinho"],
                    'transacao' => $this->session->userdata("id_transacao")
                );
            } else {
                $dados = array(
                    'id_cliente' => $_SESSION['aluno']['id_aluno'],
                    'nome' => $_SESSION['aluno']['nome'],
                    'email' => $_SESSION['aluno']['email'],
                    'descricao' => $this->descricao(),
                    'valor' => $this->cart->total(),
                    'transacao' => $this->session->userdata("id_transacao")
                );
            }
            
            $_SESSION['dados'] = $dados;

            /*
             * Verifica se a transação foi inserida na base
             */
            if (!empty($result)) {
                $result_transp = $this->gera_fatura_ovumpay($dados);

                /*
                 * Verifica se gerou transação na ovum pay
                 */
                if ($result_transp != false) {
                    $this->cart->destroy();
                    $this->session->unset_userdata("total_carrinho");
                    $this->session->set_userdata("codigo_opayt", $result_transp);
                    redirect('finalizarpedido');
                } else {
                    redirect('cursosmatriculados');
                }
            } else {
                redirect('cursosmatriculados');
            }
        } else {

            redirect('prova/' . $_SESSION['prova-confirma']['prova']);
        }
    }

}
