<?php

class Certificado_model extends CI_Model {

    function __construct() {
        parent::__construct();
    }

    public function add($certificado = null) {
        $this->db->insert('certificado', $certificado);
        
        return $this->db->insert_id();
    }
    
    public function add_certificado_eletronico_docs($id_certificado)
    {
        $certificado_cod = $this->get_certificado($id_certificado);
        
        $is_pago = $this->is_certificado_pago( $certificado_cod['id_h'] );
        $situacoes_historico = ['2','3'];
        
        if( $is_pago && in_array( $certificado_cod['situacao_historico'], $situacoes_historico) )
        {
            $url_certificado = base_url().'certificado_eletronico/'.codifica($id_certificado);
            $add_arquivo_docs = $this->add_arquivo_docs( $certificado_cod['codigo_autenticacao'], $url_certificado, $certificado_cod['id_h'] );
            
            $resposta = json_decode($add_arquivo_docs, true);
        
            $status = $resposta[0]['status'];

            if($status!==1)
            {
                
                $i=0;
                while ( $i<4 )
                {
                    $add_arquivo_docs = $this->add_arquivo_docs( $certificado_cod['codigo_autenticacao'], $url_certificado, $certificado_cod['id_h'] );
                    $resposta = json_decode($add_arquivo_docs, TRUE);
                    $status = $resposta[0]['status'];
                    
                    $i++;
                    
                    if($status!==1)
                    {
                        sleep(2);
                    }
                    
                    if( $status = 1 )
                    {
                        $i = 5;
                    }
                }
            }
            
        }
    }
    
    private function get_dados_aluno($id_fic)
    {
        $this->db->select();
        $this->db->from('aluno');
        $this->db->where('aluno.id_fic', $id_fic);
        
        $dados_aluno = $this->db->get()->result_array();
        
        if( isset($dados_aluno[0]) )
        {
            return $dados_aluno[0];
        }
    }
    
    public function get_certificado($id_certificado)
    {
        $this->db->select("historico.id AS id_h, historico.codigo_autenticacao, historico.situacao AS situacao_historico");
        $this->db->from('historico');
        $this->db->join('certificado', 'historico.id = certificado.id_historico');
        
        $this->db->where('certificado.id_certificado', $id_certificado);
        
        $cerfiticado = $this->db->get()->result_array();
        
        if( isset($cerfiticado[0]))
        {
            return $cerfiticado[0];
        }
    }

    private function add_arquivo_docs($id_arquivo, $url_certificado, $id_historico)
    {
        $url = DOCS_URL . 'salvar';
        
        $post['auth'] = array(
            'chave' => IMAZON_CHAVE,
            'token' => IMAZON_TOKEN
        );
        
        $post['arquivo'] = array(
            array(
                'id_arquivo' => $id_arquivo,
                'tipo' => '1',
                'descricao' => 'Certificado Eletronico',
                'processar' => '1',
                'url' => $url_certificado,
                'url_retorno' => ''
            )
        );
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        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);
        
        $resposta_docs = curl_exec($ch); # o retorno é um Objeto JSON
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        
        curl_close($ch);
        
        $this->add_log_docs($url_certificado, $id_historico, $id_arquivo, $resposta_docs, $code);
        
        return $resposta_docs;
    }
    
    private function add_log_docs( $url, $id_historico, $codigo_autenticacao, $resposta_docs, $codigo_http)
    {
        
        $base_lega = [
                        'url'=>$url, 
                        'id_historico'=>$id_historico, 
                        'codigo_autenticacao'=>$codigo_autenticacao,
                        'resposta_docs'=>$resposta_docs,
                        'codigo_http'=>$codigo_http,
                        'data' => date("Y-m-d H:i:s")
                    ];
        
        $this->db->insert("log_docs", $base_lega);
    }

        public function     get_certificado_eletronico($id_certificado)
    {
        $query = $this->db->query("SELECT COUNT(A.id_fic) AS quantidade,H.id_historico, H.id AS id_h, A.id_fic, A.nome nome_aluno, A.endereco endereco_aluno,
                                                    A.numero, A.bairro, A.cidade, A.complemento, A.cep,A.estado,
                                                    A.rg, A.cpf,
                                                    CUR.nome nome_curso, CUR.descricao,
                                                    H.codigo_autenticacao, H.situacao,H.nota, H.carga_horaria,
                                                    H.situacao situacao_historico,
                                                    H.primeiro_dia data_cadastro_curso, H.data_aprovacao,
                                                    C.id_certificado, C.id_tipo
                                                    FROM certificado C
                                                    JOIN historico H ON ( C.id_historico = H.id )
                                                    JOIN aluno A ON ( A.id_fic = H.id_aluno )
                                                    JOIN curso CUR ON (CUR.id_curso = H.id_curso)
                                                    WHERE H.situacao IN ( 2, 3 ) AND C.situacao = 0 AND C.id_tipo = 3 AND C.id_certificado = ".$id_certificado."
                                                    GROUP BY A.id_fic                                                
                                                    ORDER BY A.estado ASC, A.nome ASC");
            
        return $query->result_array();
    }
    
    public function is_certificado_pago($id_historico)
    {
        $this->db->select();
        $this->db->from('pedido');
        
        $this->db->join('item_pedido','pedido.transacao = item_pedido.transacao');
        $this->db->join('historico','historico.id = item_pedido.id_historico');
        
        $this->db->where('item_pedido.id_historico', $id_historico);
        $this->db->where('pedido.situacao', '3');
        
        $certificado_pago = $this->db->get()->result_array();
        
        if( count($certificado_pago)>0 )
        {
            return TRUE;
        }
        
        return FALSE;
        
    }

    public function get_certificados_by_historico($historico = null) {
        $this->db->from('produto');
        $this->db->join('certificado', 'produto.id_produto = certificado.id_tipo');
        $this->db->where('certificado.id_historico', $historico);
        $this->db->where_in('certificado.id_tipo', array(2, 1));
//        $this->db->get();
//        echo $this->db->last_query();die;
        return $this->db->get();
                
    }

    public function get_certificados_impresos_by_aluno() {
        return $this->db->from('produto')
                        ->select("id_certificado, curso.nome, certificado.endereco, certificado.situacao, pedido.data_alteracao, pedido.data_compra, produto.valor, produto.nome as nomeProduto, historico.id_historico, certificado.data_registro")
                        ->join('certificado', 'produto.id_produto = certificado.id_tipo')
                        ->join('historico', 'historico.id_historico = certificado.id_historico')
                        ->join('curso', 'curso.id_curso = historico.id_curso')
                        ->join('item_pedido', 'item_pedido.id_historico = historico.id_historico')
                        ->join('pedido', 'item_pedido.transacao = pedido.transacao')
                        ->where('historico.id_aluno', $this->session->userdata('imazon_id_fic'))
                        ->where('certificado.situacao', 1)
                        ->where('pedido.situacao', 3)
                        ->get();
    }

}
