<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Certificado extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('Certificado_Model');
        $this->load->model('Cursos_Model');
        $this->load->model('Cadastro_Model');
        $this->load->model('Historico_Model');
        $this->load->model('Matricula_Model');
        $this->load->database();
        $this->load->library('pdf');
        $this->load->library('url');
        $this->load->library('criptografia');
        $this->load->library('Sanitize');
    }

    public function certificados() {

        if (isset($_SESSION['aluno']) == FALSE) {

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

            $cert = trim($this->input->post('cert', TRUE));

            if ($cert) {

                $this->form_validation->set_rules('cert', 'Cert', 'trim|required', array('required' => 'O campo certificado está em branco. '));

                if ($this->form_validation->run() == FALSE) {
                    $form = validation_errors('<script>Materialize.toast("O campo certificado está em branco", 4000, "black");</script>');
                    $dados = array('descricao' => 'Autenticação e Consulta de Certificados online emitidos no Amazônia Cursos','erro_form' => $form, 'titulo' => 'Certificado', 'aluno' => $this->Cadastro_Model->aluno());
                    $this->load->view('certificado', $dados);
                } else {

                    $certificado = $this->Certificado_Model->obtemCertificado($cert);
                    $dados = array('descricao' => 'Autenticação e Consulta de Certificados online emitidos no Amazônia Cursos','controle' => $this, 'termos' => $this->Cadastro_Model->obtemTermo(), 'certificado' => $certificado, 'titulo' => 'Certificado', 'aluno' => $this->Cadastro_Model->aluno());
                    $this->load->view('certificados', $dados);
                }
            } else {

                $dados = array('descricao' => 'Autenticação e Consulta de Certificados online emitidos no Amazônia Cursos','termos' => $this->Cadastro_Model->obtemTermo(), 'titulo' => 'Certificado', 'aluno' => $this->Cadastro_Model->aluno());
                $this->load->view('certificado', $dados);
            }
        } else {
            $this->obtemCertificados();
        }
    }

    public function obtemCertificados() {
        (isset($_SESSION['controle-aluno']) == TRUE) ? redirect('carreira') : '';
        $id_aluno = $_SESSION['aluno']['id_aluno'];

        $cursos = $this->Historico_Model->getCursoHistorico($id_aluno);
        $dados = array('descricao' => 'Autenticação e Consulta de Certificados online emitidos no Amazônia Cursos','aluno' => $this->Cadastro_Model->aluno(), 'termos' => $this->Cadastro_Model->obtemTermo(), 'cursos' => $cursos, 'titulo' => 'Certificado');
        $this->load->view('certificado_log', $dados);
    }

    public function detalhescertificados($id) {
           
           $aluno = $this->Matricula_Model->obtemCursoMatriculadoporIDhistorico($this->criptografia->decodifica($id));
           $id_aluno=$aluno[0]->id_aluno;
           

        if (isset($_SESSION['aluno']) == TRUE) {
            $cpf = $this->validacpf();
            $cursos = $this->Matricula_Model->obtemCursoMatriculadoporHistorico_aluno($this->criptografia->decodifica($id),$id_aluno);
                                              
            
//            print_r($this->criptografia->decodifica($id));
//            exit();
            $id_aluno = $_SESSION['aluno']['id_aluno'];
            $aluno = $this->Cadastro_Model->getAlunoPorID($id_aluno);
            $dados = array('descricao' => 'Autenticação e Consulta de Certificados online emitidos no Amazônia Cursos','certificado_enviado' => $this->Certificado_Model->obtemcertificadoenviado($this->criptografia->decodifica($id)), 'cpf' => $cpf, 'aluno' => $aluno, 'termos' => $this->Cadastro_Model->obtemTermo(), 'cursos' => $cursos, 'titulo' => 'Detalhes');
            $this->load->view('detalhescertificados', $dados);
        } else {
            redirect();
        }
    }

    public function detalhescertificados_old($id) {

        if (isset($_SESSION['aluno']) == TRUE) {
            $cpf = $this->validacpf();
            $cursos = $this->Matricula_Model->obtemCursoMatriculadoporHistorico($this->criptografia->decodifica($id));
            $id_aluno = $_SESSION['aluno']['id_aluno'];
            $aluno = $this->Cadastro_Model->getAlunoPorID($id_aluno);
            $dados = array('cpf' => $cpf, 'aluno' => $aluno, 'termos' => $this->Cadastro_Model->obtemTermo(), 'cursos' => $cursos, 'titulo' => 'Detalhes');
            $this->load->view('detalhescertificados', $dados);
        } else {
            redirect();
        }
    }

    public function validacpf() {

        $alunonverificado = $this->Cadastro_Model->getalunonverificado();

        if ($alunonverificado != NULL) {
            return false;
        } else {
            return true;
        }
    }

    public function certificado($historico) {
        $id_historico = $this->criptografia->decodifica($historico);

        $h = $this->Historico_Model->getHistorico($id_historico);

        // VERIFICA SE O CERTIFICADO ESTA PAGO
        if ($h['certificado'] == 1) {

            $id_aluno = $h['id_aluno'];

            $aluno = $this->Cadastro_Model->getAlunoPorID($id_aluno);
            $ultimo_dia=$h['ultimo_dia'];
            $hoje = date('Y-m-d');

            if ($aluno['situacao'] == 2 || $aluno['situacao'] == 1) {
                // CERTIFICADO DE CONCLUSÃO  
                if($h['concluido'] == 3){ 
                    $verificaCert = $this->Certificado_Model->getAutenticaHistorico($id_historico, 3);
                    $this->certDocs($verificaCert, 3, $id_historico, $historico, $h['cod_autenticacao']);
                }
                
                elseif (($h['concluido'] == 1) && (strtotime($hoje) >= strtotime($ultimo_dia))) {
                    $verificaCert = $this->Certificado_Model->getAutenticaHistorico($id_historico, 2);
                    $this->certDocs($verificaCert, 2, $id_historico, $historico, $h['cod_autenticacao']);
                    // CERTIFICADO DE PARTICIPAÇÃO    
                } else {
                    $verificaCert = $this->Certificado_Model->getAutenticaHistorico($id_historico, 1);
                    $this->certDocs($verificaCert, 1, $id_historico, $historico, $h['cod_autenticacao']);
                }
            } else {
                if (isset($_SESSION['aluno']) == FALSE) {
                    $this->session->set_flashdata('erro-certificado', ' <i class="fa fa-exclamation-circle"></i> Você ainda não validou seu cadastro. A validação ocorre na primeira emissão do seu certificado. Faça o seu <a  href="' . base_url('login_site') . '"><b>login</b></a> e realize agora mesmo');
                    redirect('certificados');
                } else {
                    $this->session->set_flashdata('erro-certificado', ' <div class="alert alert-warning " style="margin-left: 7%;" role="alert"> <i class="fa fa-exclamation-circle"></i> Você ainda não validou seu cadastro. Clique no botão CERTIFICADO para validar o seu cadastro</div>');
                    redirect('detalhescertificados/' . $historico);
                }
            }
        } else {
            redirect('certificados');
        }
    }

    private function certDocs($verificaCert, $tipo_cert, $id_historico, $historico, $cod_autentica) {
       
        if (empty($verificaCert)) {

            $cod = $this->Certificado_Model->getAutenticaHistoricoAutenticacao($id_historico, $cod_autentica);
            
            if (empty($cod)) {
                $cod_aut = $cod_autentica;
            } else {
                $cod_aut = $this->codAutenticacao();
            }
            $this->Certificado_Model->setAutenticaHistorico($id_historico, $cod_aut, $tipo_cert);
        }
        $cod_aut = $this->Certificado_Model->getAutenticaHistorico($id_historico, $tipo_cert);
        $cod_aut = end($cod_aut)->cod_autenticacao;
        
        $conDocs = $this->Certificado_Model->consultaOvumDocs($cod_aut);
        
        if ($conDocs->status == 0) {
            $certDocs = $this->Certificado_Model->ovumDocs($cod_aut, 'CERTIFICADO', $historico);
            redirect($certDocs[0]['arquivo']['link']);
        } else {
            redirect($conDocs->arquivo->link);
        }
    }

    private function codAutenticacao() {
        
        do {
            
            $hash = $this->Matricula_Model->gera_hash();
            $cod_aut = $this->Matricula_Model->gera_autenticacao($hash);

            $this->db->where('cod_autenticacao', $cod_aut);
            $vCod = $this->db->get('autentica_historico')->result();
            
        } while (!empty($vCod));

        return $cod_aut;
    }

    public function certificadoWeb($historico) {
        
        $id_historico = $this->criptografia->decodifica($historico);
        $h = $this->Historico_Model->getHistorico($id_historico);
        $ementa = '';
        if ($h['certificado'] == 1) {

            $id_aluno = $h['id_aluno'];
            $id_curso = $h['id_curso'];
            $cursos = $this->Cursos_Model->obtemCursosPorID($id_curso);
            foreach ($cursos as $value) {
                
            }

            $assina = $this->Certificado_Model->getAssinaturaAtual($id_aluno);
            $aluno = $this->Cadastro_Model->getAlunoPorID($id_aluno);
            if ($aluno['situacao'] == 2 || $aluno['situacao'] == 1) {

                $pdf = new PDF('L', 'mm', 'A4');
                $pdf->AliasNbPages();
                $pdf->AddPage();
                // IMAGEM 
                $pdf->Image('assets/img/certificado/Certificado Frente.jpg', 0, 0, 297); // IMAGEM DE FUNDO

                $pdf->SetFont('Arial', '', 10.2);
                $pdf->setXY("53", "71"); // ALTURA DO NOME DO ALUNO
                $pdf->MultiCell(190, 5, "Curso: " . utf8_decode(mb_strtoupper($value->nome)), 0, ' ');
                $pdf->setXY(53, 81); // ALTURA DO CURSO 
                $num_matricula = '  Nº Matrícula: ' . $h['id_historico'];
                if ($h['concluido'] == 1) {
                    if ($h['nota'] >= 50) {
                        $pdf->MultiCell(120, 5, "Aluno(a): " . utf8_decode(mb_strtoupper($aluno['nome']) . "\n" . "Carga Horária: " . $h['carga_horaria'] . " Horas" . "\n" . "Tipo: Capacitação/ Atualização" . "\n" . "Aproveitamento: " . number_format($h['nota'], 1, ',', '.') . $num_matricula), 0, '');
                    } else {
                        $pdf->MultiCell(120, 5, "Aluno(a): " . utf8_decode(mb_strtoupper($aluno['nome']) . "\n" . "Carga Horária: " . $h['carga_horaria'] . " Horas" . "\n" . "Tipo: Capacitação/ Atualização" . $num_matricula . "\n"), 0, '');
                    }
                } else {
                    $pdf->MultiCell(120, 5, "Aluno(a): " . utf8_decode(mb_strtoupper($aluno['nome']) . "\n" . "Carga Horária: " . $h['carga_horaria'] . " Horas" . "\n" . "Tipo: Capacitação/ Atualização" . "\n"  . $num_matricula), 0, '');
                }

                $pdf->SetFont('Arial', '', 10.2);
                $pdf->setXY(195, 79); // ALTURA DO DOCUMENTO DO ALUNO
                //RG:1 ; CPF:2 ; CNH:3
                $tipo_doc = $assina['tipo_doc'];
                if ($tipo_doc == 1) {
                    $pdf->Cell(0, 10, "RG: " . strtoupper($assina['documento']), 0, 1, 'L');
                } else if ($tipo_doc == 2) {
                    $pdf->Cell(0, 10, "CPF: " . strtoupper($assina['documento']), 0, 1, 'L');
                } else if ($tipo_doc == 3) {
                    $pdf->Cell(0, 10, "CNH: " . strtoupper($assina['documento']), 0, 1, 'L');
                }

                $pdf->setXY(195, 83); // ALTURA DA 1º PARTE DO PERÍODO
                if ($h['concluido'] == 1) {
                    $pdf->Cell(0, 11, utf8_decode('Período: ') . date("d/m/Y", strtotime($h['primeiro_dia'])) . utf8_decode(' a ') . date("d/m/Y", strtotime($h['ultimo_dia'])), 0, 1, 'L');
                } else {
                    if(empty($h['ultimo_dia'])){ 
                    $pdf->Cell(0, 11, utf8_decode('Início: ') . date("d/m/Y", strtotime($h['primeiro_dia'])), 0, 1, 'L');
                    }
                    else{
                     $pdf->Cell(0, 11, utf8_decode('Período: ') . date("d/m/Y", strtotime($h['primeiro_dia'])) . utf8_decode(' a ') . date("d/m/Y", strtotime($h['ultimo_dia'])), 0, 1, 'L');   
                    }
                    
                    }

                if ($h['nota'] >= 50) {
                    $pdf->setXY(195, 82.5);
                    $pdf->Cell(0, -8, utf8_decode('Cert. Nº 008.') . $h['id_historico'], 0, 1, 'L');
                } else {
                    $pdf->setXY(195, 82.5);
                    $pdf->Cell(0, -8, utf8_decode('Cert. Nº 008.') . $h['id_historico'], 0, 1, 'L');
                }
                $pdf->setXY(195, 87); // ALTURA DA SITUAÇÃO DO ALUNO
                if ($h['nota'] >= 50) {
                  
                }
                $pdf->setXY(195, 92); // ALTURA DA SITUAÇÃO DO ALUNO
                if ($h['concluido'] == 1) {
                    if ($h['frequencia'] > 0) {
                        $pdf->Cell(0, 12, utf8_decode('Frequência: ' . $h['frequencia'] . '%'), 0, 1, 'L');
                    }
                }
                $pdf->Line(50, 102, 240, 102); // ALTURA DA LINHA  
                $pdf->setY(103); // ALTURA DO [CONTEÚDO DO CURSO]
                $pdf->SetFont('Arial', 'B', 11);
                $pdf->setX(132);
                $pdf->Cell(0, 5, utf8_decode('Conteúdo do Curso '));



                $fontSizeConteudo = (10 * 531) / strlen($value->ementa) > 10 ? 10 : (10 * 531) / strlen($value->ementa);
                
                $pdf->setY(114);
                $pdf->SetFont('Arial', '', number_format($fontSizeConteudo, 2, '.', '.'));
                $pdf->setX(25);

                $conteudo = explode("<br />", nl2br(trim($value->ementa)));

                $txt = str_replace('.', '', $conteudo);
                foreach ($txt as $nomes) {
                    $ementa .= trim($nomes) . '; ';
                }

                $regra = $ementa;

                $pos = strpos($regra, '<ol>');
                if ($pos === false) {
                    
                } else {
                    $implode_descricao = strip_tags($regra);
                }

                $pos = strpos($regra, '–');
                if ($pos === false) {
                    
                } else {
                    $implode_descricao = str_replace("–", "", $regra);
                }

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

                $pdf->setXY(52, 109); // ALTURA DA EMENTA

                $posi = strpos($regra, '<ol>');
                if (strpos($regra, '; ;') !== false) {
                    $implode_descricao = str_replace("; ;", ";", $regra);
                    $implode_descricao = utf8_decode($implode_descricao);
                }
                $implode_descricao = substr($implode_descricao, 0, -2);
                if ($posi === false) {
                    $pdf->MultiCell(190, 3.3, strip_tags($implode_descricao), 0, 'J');
                } else {
                    $pdf->MultiCell(190, 3.3, strip_tags($implode_descricao), 0, 'J');
                }
                if (strlen($implode_descricao) < 582) {
                    $pdf->Line(50, 130, 240, 130);
                } else {
                    $pdf->Line(50, 133, 240, 133);
                }
                $pdf->SetFont('Arial', '', 10);
                $texto = utf8_decode("Base Legal: Lei Nº 9394/96, Art 40, Resolução CNE/CEB Nº 6/2012, Art. 25º. Decreto 5154/2004, Art. 3º");

                $pdf->SetFont('Arial', '', 10);
                $pdf->setXY(50, 135);
                $pdf->MultiCell(0, 5, $texto, 0, 'L');
                $pdf->setXY(50, 140);
                $pdf->MultiCell(0, 5, 'Autenticar em: ' . URL_DOCS_AUTENTICACAO, 0, 'L');
                $pdf->setXY(50, 145);
                if ($h['concluido'] == 1) {
                    $verificaCert = $this->Certificado_Model->getAutenticaHistorico($id_historico, 2);
                    $pdf->MultiCell(0, 5, utf8_decode('Código de Autenticação: ') . $verificaCert[0]->cod_autenticacao . utf8_decode(' Certificado gerado eletronicamente.'), 0, 'L');
                } 
                
                 if ($h['concluido'] == 3) {
                    $verificaCert = $this->Certificado_Model->getAutenticaHistorico($id_historico, 3);
                    $pdf->MultiCell(0, 5, utf8_decode('Código de Autenticação: ') . $verificaCert[0]->cod_autenticacao . utf8_decode(' Certificado gerado eletronicamente.'), 0, 'L');
                } 
                
                if ($h['concluido'] == 0) {
                    $verificaCert = $this->Certificado_Model->getAutenticaHistorico($id_historico, 1);
                    $pdf->MultiCell(0, 5, utf8_decode('Código de Autenticação: ') . $verificaCert[0]->cod_autenticacao . utf8_decode(' Certificado gerado eletronicamente.'), 0, 'L');
                } 
                
                if ($h['concluido'] == 2) {
                    $verificaCert = $this->Certificado_Model->getAutenticaHistorico($id_historico, 1);
                    $pdf->MultiCell(0, 5, utf8_decode('Código de Autenticação: ') . $verificaCert[0]->cod_autenticacao . utf8_decode(' Certificado gerado eletronicamente.'), 0, 'L');
                }
                
//                else {
//                    $verificaCert = $this->Certificado_Model->getAutenticaHistorico($id_historico, 1);
//                    $pdf->MultiCell(0, 5, utf8_decode('Código de Autenticação: ') . $verificaCert[0]->cod_autenticacao . utf8_decode(' Certificado gerado eletronicamente.'), 0, 'L');
//                }
                
                $ch = curl_init();
        $codigo=$verificaCert[0]->cod_autenticacao;
        $base="https://cidadeaprendizagem.com.br/qrcode/index.php?data=https://www.ovumdoc.com/documento/";
        $autenticacao=$codigo."&url=".$codigo;
        
        $url=$base.$autenticacao;
      
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $server_output = curl_exec($ch);
        curl_close ($ch);
        $pdf->Image('https://cidadeaprendizagem.com.br/qrcode/temp/'.$codigo.'.png', 245, 135, 33, 33, 'PNG');        
          
                
                $pdf->setXY(50, 150);
                $pdf->MultiCell(0, 5, utf8_decode('Local e Data de Emissão: Belém, ' . date('d/m/Y')), 0, 'L');
                $pdf->setXY(50, 155);
                $pdf->MultiCell(0, 5, utf8_decode('Mantenedora: '.CERTIFICADO['nome_empresa']. ' ('.CERTIFICADO['cnpj'].')'), 0, 'L');
                $pdf->setXY(50, 160);
                $pdf->MultiCell(0, 5, utf8_decode(CERTIFICADO['endereco_telefone']), 0, 'L');

                // VERSO DO CERTIFICADO

                $pdf->AddPage();
                $pdf->Image('assets/img/certificado/Certificado-4-Costa.jpg', 0, 0, 297);
                $pdf->SetFont('Arial', 'B', 16);
                $pdf->setY(50);
                $pdf->Cell(0, 0, utf8_decode("HISTÓRICO"), 0, true, 'C');
                $pdf->setY(55);
                $pdf->setX(50);
                $pdf->SetFont('Arial', '', 10);
                $pdf->MultiCell(190, 5.5, utf8_decode(CERTIFICADO['historico']), 0, 'J');

                $pdf->SetFont('Arial', 'B', 16);
                $pdf->setY(85);
                $pdf->Cell(0, 0, utf8_decode("MISSÃO"), 0, true, 'C');

                $pdf->setY(90);
                $pdf->setX(50);
                $pdf->SetFont('Arial', '', 10);
                $pdf->MultiCell(190, 5.5, utf8_decode(CERTIFICADO['missao']), 0, 'C');

                $pdf->SetFont('Arial', 'B', 16);
                $pdf->setY(105);
                $pdf->Cell(0, 0, utf8_decode("INFORMAÇÕES"), 0, true, 'C');
                $pdf->setY(110);
                $pdf->setX(50);
                $pdf->SetFont('Arial', '', 10);
                $pdf->MultiCell(190, 5.5, utf8_decode(CERTIFICADO['informacoes']), 0, 'J');
                

                $pdf->Output();
            } else {
                if (isset($_SESSION['aluno']) == FALSE) {
                    $this->session->set_flashdata('erro-certificado', ' <i class="fa fa-exclamation-circle"></i> Você ainda não validou seu cadastro. A validação ocorre na primeira emissão do seu certificado. Faça o seu <a  href="' . base_url('login_site') . '"><b>login</b></a> e realize agora mesmo');
                    redirect('certificados');
                } else {
                    $this->session->set_flashdata('erro-certificado', ' <div class="alert alert-warning " style="margin-left: 7%;" role="alert"> <i class="fa fa-exclamation-circle"></i> Você ainda não validou seu cadastro. Clique no botão CERTIFICADO para validar o seu cadastro</div>');
                    redirect('detalhescertificados/' . $historico);
                }
            }
        } else {
            redirect('certificados');
        }
    }
    
    public function reenviaCertificados() {

        $transacao = $this->uri->segment(2, 0);

        $this->Certificado_Model->enviaPorEmail($transacao);
    }

    public function linkcert($cert) {
        return $conDocs = $this->Certificado_Model->consultaOvumDocs($cert)->arquivo->link;
    }

}
