<?php

class Certificado_Model extends CI_Model {

    function __construct() {
        parent::__construct();
        $this->load->library('criptografia');
    }
    
    public function ementa($txt_ementa) {
        $ementa = '';
        $conteudo = explode("<br />", nl2br(trim($txt_ementa)));
        $txt = str_replace('.', ' ', $conteudo);
        foreach ($txt as $nomes) {
            $ementa .= trim($nomes) . '; ';
        }

        $regra = $ementa;
        $i = 0;
        if (strpos($regra, '<ol>') !== false) {
            $implode_descricao = strip_tags($regra);
            $i = 1;
        }

        if (strpos($regra, '-') !== false) {
            $implode_descricao = str_replace("–", "", $regra);
            $i = 1;
        }

        $implode_descricao = ($i == 1) ? str_replace("\n", "", $implode_descricao) : str_replace("\n", "", $regra);
        $implode_descricao = utf8_decode($implode_descricao);
        $implode_descricao = str_replace('?', '', $implode_descricao);

        if (strpos($regra, '; ;') !== false) {
            $implode_descricao = str_replace("; ;", ";", $regra);
            $implode_descricao = utf8_decode($implode_descricao);
        }
        if (strpos($implode_descricao, '; ') !== false) {
            return $implode_descricao = substr($implode_descricao, 2, -2);
        } else {
            return $implode_descricao = substr($implode_descricao, 0, -2);
        }
    }  
    
    private function obtemCertificadoAntigo($certificado) {
        
        $this->db->select('b.cod_autenticacao,`b`.`concluido` as `concluido`, `b`.`id_curso` as `id_curso`, `b`.`id_historico` as `id_historico`, `b`.`nota` as `nota`, `c`.`nome` as `nome_aluno`, `c`.`situacao` as `situacao_aluno`, `d`.`nome` as `nome_curso`, a.tipo, a.cod_autenticacao as autenticacao,b.ultimo_dia');
        $this->db->join('curso d', 'b.id_curso = d.id_curso');
        $this->db->join('aluno c', 'b.id_aluno = c.id_aluno');
        $this->db->join('autentica_historico a', 'a.id_historico = b.id_historico', 'left');
        $this->db->group_start();
        $this->db->where('c.nome', mb_strtoupper($certificado));
        $this->db->or_where("b.cod_autenticacao", $certificado);
        $this->db->group_end();
        $this->db->where_in('b.concluido ', array(0, 1, 3));
        $this->db->where('b.certificado', 1);
        $query = $this->db->get('historico b')->result();
        
        
        
        // INSERE OS CERTIFICADOS ANTIGOS NA NOVA TABELA
        
        foreach ($query as $certificados) {
            if (empty($certificados->tipo)) {
                // CERTIFICADO DE PARTICIPAÇÃO
                 $ultimo_dia=$certificados->ultimo_dia;
                 $hoje = date('Y-m-d');
                
                if ($certificados->concluido == 3) {
                    $this->setAutenticaHistorico($certificados->id_historico, $certificados->cod_autenticacao, 3);
                // CERTIFICADO DE CONCLUSÃO    
                } 
                 
                elseif (($certificados->concluido) == 0 && (strtotime($hoje) < strtotime($ultimo_dia)) ) {
                    $this->setAutenticaHistorico($certificados->id_historico, $certificados->cod_autenticacao, 1);
                // CERTIFICADO DE CONCLUSÃO    
                } else {
                    $this->setAutenticaHistorico($certificados->id_historico, $certificados->cod_autenticacao, 2);
                }
            }
        }
    }
    
    private function obtemCertificadoConsulta($certificado) {

        $this->db->select('b.cod_autenticacao,`b`.`concluido` as `concluido`, `b`.`id_curso` as `id_curso`, `b`.`id_historico` as `id_historico`, `b`.`nota` as `nota`, `c`.`nome` as `nome_aluno`, `c`.`situacao` as `situacao_aluno`, `d`.`nome` as `nome_curso`, a.tipo, a.cod_autenticacao as autenticacao');
        $this->db->join('curso d', 'b.id_curso = d.id_curso');
        $this->db->join('aluno c', 'b.id_aluno = c.id_aluno');
        $this->db->join('autentica_historico a', 'a.id_historico = b.id_historico');
        $this->db->group_start();
        $this->db->where('c.nome', mb_strtoupper($certificado));
        $this->db->or_where("a.cod_autenticacao", $certificado);
        $this->db->group_end();
        $this->db->where_in('b.concluido ', array(0, 1, 3));
        $this->db->where('b.certificado', 1);
        $this->db->order_by('b.id_historico', 'DESC');
        $query = $this->db->get('historico b')->result();
        
        return $query;
    }

    public function obtemCertificado($certificado) {
        
        $this->obtemCertificadoAntigo($certificado);
        
        $cert = $this->obtemCertificadoConsulta($certificado);
        
      
        
        
        foreach ($cert as $certs) {
            $docs = $this->consultaOvumDocs($certs->autenticacao);

            if ($docs->status == 0) {
                $docs_env = $this->ovumDocs($certs->autenticacao, 'CERTIFICADO', $this->criptografia->codifica($certs->id_historico));               
            }
        }
        
        return $cert;
    }

    public function obtemcertificadoenviado($historico) {
        $this->db->select('c.id_certificado, c.data_registro,c.endereco as endc,c.situacao,a.nome as nomealuno, a.endereco,a.numero,a.complemento,a.cep,a.bairro,a.cidade,a.estado, d.nome as nomecurso, c.id_tipo as tipoc, t.tipo as tipot');
        $this->db->join('historico h', 'h.id_historico = c.id_historico');
        $this->db->join('aluno a', 'a.id_aluno = h.id_aluno');
        $this->db->join('curso d', 'd.id_curso = h.id_curso');
        $this->db->join('transacao t', 't.id_transacao = c.transacao');
        $this->db->where('h.certificado', 1);
        $this->db->where('h.concluido', 1);
        $this->db->where('c.id_historico', $historico);
        $this->db->order_by('c.id_certificado', 'DESC');
        $query = $this->db->get('certificado c');

        return $query->row_array();
        
    }
    
    public function getAssinaturaAtual($id_aluno) {
        
        $this->db->where('id_aluno', $id_aluno);
        $this->db->order_by('id_doc_aluno', 'DESC');
        $query = $this->db->get('documentacao_aluno');
        return $query->row_array();
        
    }
    public function getHistorico($id_historico) {

        $this->db->where('id_historico', $id_historico);
        $query = $this->db->get('historico');

        return $query->row_array();
    }
    
    public function getCursoHistorico($id_aluno) {
        
        $this->db->where('a.id_curso = b.id_curso');
        $this->db->where('a.id_aluno', $id_aluno);
        $this->db->order_by('a.primeiro_dia', 'DESC');
        $query = $this->db->get('historico a,curso b');

        return $query->result();
    }

    public function obtemConsultaA($id_aluno, $id_historico) {

        $sql = "SELECT * FROM  transacao as t JOIN historico h ON (t.id_historico=h.id_historico) JOIN aluno a ON (h.id_aluno = a.id_aluno)
        WHERE a.id_aluno= ? and t.situacao in (1,4) and h.nota>=50 and t.certificado!=6 and h.concluido in ( 1, 3) and h.id_historico = ?
        group by h.id_historico";

        $query = $this->db->query($sql, array($id_aluno, $id_historico));

        return $query->row_array();
    }

    public function obtemConsultaB($id_aluno, $id_historico) {

        $sql = "SELECT c.id_historico, c.id_curso, c.nota FROM  transacao a JOIN itens_transacao b ON (a.id_transacao=b.transacao) JOIN historico c ON (b.historico = c.id_historico) JOIN aluno d ON (a.id_aluno = d.id_aluno) WHERE a.situacao in (1,4) and b.tipo!='DEC' AND d.id_aluno = ? and c.concluido in (0, 1, 3) and c.id_historico = ? group by c.id_historico";

        $query = $this->db->query($sql, array($id_aluno, $id_historico));

        return $query->row_array();
    }
    
    public function enviaPorEmail($transacao) {
        
        $this->db->select('a.email, a.nome, cu.nome as nome_curso, h.id_historico');
        $this->db->where('c.transacao', $transacao);
        $this->db->join('historico h', 'h.id_historico = c.id_historico');
        $this->db->join('curso cu', 'h.id_curso = cu.id_curso');
        $this->db->join('aluno a', 'a.id_aluno = h.id_aluno');
        $this->db->where('h.certificado', 1);
        $certificado = $this->db->get('certificado c')->result();
       
        $this->load->library('template');
        
        $template = $this->template->certificado($certificado);
        $this->Cadastro_Model->email('CERTIFICADO', $template, $certificado[0]->email);
        
        $this->session->set_userdata("certificado-email", '<div class="alert alert-success alert-conf" role="alert">O seu certificado foi enviado por e-mail</div>');
        $codigo_recibo = $certificado[0]->id_historico;
        $descricao = 'CERTIFICADO';
        $this->load->library('criptografia');
        $codigo = $this->criptografia->codifica($certificado[0]->id_historico);
        $this->ovumDocs($codigo_recibo, $descricao, $codigo);
    }
    
    public function retiraCertificado($transacao) {
        
        $this->db->select('a.email, a.nome, cu.nome as nome_curso, h.id_historico');
        $this->db->where('c.transacao', $transacao);
        $this->db->join('historico h', 'h.id_historico = c.id_historico');
        $this->db->join('curso cu', 'h.id_curso = cu.id_curso');
        $this->db->join('aluno a', 'a.id_aluno = h.id_aluno');
        $this->db->where('h.certificado', 1);
        $certificado = $this->db->get('certificado c')->result();
        
        foreach ($certificado as $certificados) {
            
            $this->db->set('certificado', 0);
            $this->db->where('id_historico', $certificados->id_historico);
            $this->db->update('historico');
            
            $this->db->set('situacao', 2);
            $this->db->where('id_historico', $certificados->id_historico);
            $this->db->where('transacao', $transacao);
            $this->db->update('certificado');
        }
    }
    
     public function ovumDocs($codigo_recibo, $descricao, $codigo) {
         
        #Local da funcionalidade do Serviço OvumDocs. (Função Armazenamento)
        $post['auth'] = array(
            'chave' => OPAYT_CHAVE,
            'token' => OPAYT_TOKEN
        );
        $post['arquivo'] = array(
            array(
                'id_arquivo' => $codigo_recibo,
                'tipo' => '4',
                'descricao' => $descricao,
                'url' => base_url('certificado_online/' . $codigo)
            )
        );
        
        $ch = curl_init(URL_DOCS . '/salvar');
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

        $requisicao = curl_exec($ch);
        
        curl_close($ch);
        return json_decode($requisicao, true);
    }
    
    
    public function consultaOvumDocs($cod_autenticacao) {
        
        $post['auth'] = array(
            'chave' => OPAYT_CHAVE,
            'token' => OPAYT_TOKEN
        );

        $post['id_arquivo'] = $cod_autenticacao; 

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, URL_DOCS . '/buscar');
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

        $requisicao = json_decode(curl_exec($ch));
        curl_close($ch);
        return $requisicao;
    }
    
    public function getAutenticaHistorico($historico, $tipo) {
        
        $this->db->where('id_historico', $historico);
        $this->db->where('tipo', $tipo);
        $this->db->order_by('id_autenticacao', 'DESC');
        return $this->db->get('autentica_historico')->result();
    }
    
    public function setAutenticaHistorico($historico, $cod_autenticacao,$tipo) {
        
        $this->db->insert('autentica_historico', array('id_historico' => $historico, 'cod_autenticacao' => $cod_autenticacao, 'tipo' => $tipo));
    }
    
    public function getAutenticaHistoricoAutenticacao($historico, $cod_autenticacao) {
        
        $this->db->where('id_historico', $historico);
        $this->db->where('cod_autenticacao', $cod_autenticacao);
        return $this->db->get('autentica_historico')->result();
    }
    
    public function certificadoPago() {

        $this->db->join('aluno c', 'b.id_aluno = c.id_aluno');
        $this->db->join('autentica_historico a', 'a.id_historico = b.id_historico');
        $this->db->where("c.id_aluno", $_SESSION['aluno']['id_aluno']);
        $this->db->where_in('b.concluido ', array(0, 1, 3));
        $this->db->where('b.certificado', 1);        
        $query = $this->db->get('historico b')->result();
        
        return $query;
        
    }
}
