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

class CertificadosEletronicos_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
        $this->imazoncursos = $this->load->database('imazoncursos', TRUE);
    }
    
    private function get_lote_certificado_by_idLote($id_lote)
    {
        $this->imazoncursos->select("id_certificado");
        $this->imazoncursos->from('certificado_lote_certificado');
        $this->imazoncursos->where('id_lote', $id_lote);
        
        return $this->imazoncursos->get()->result_array();
    }
    
    private function get_certificados_by_id($ids_certificados)
    {
        $this->imazoncursos->select("certificado.id_certificado, certificado.id_historico, certificado.codigo_programa, "
                . "certificado.data_registro, certificado.situacao, certificado.rastreamento, transacao, "
                . "certificado.id_tipo, certificado.endereco, aluno.endereco as endereco_aluno, aluno.numero, aluno.complemento, "
                . "aluno.bairro, aluno.cidade, aluno.estado, aluno.cep");
        $this->imazoncursos->from('certificado');
        $this->imazoncursos->join('historico', 'certificado.id_historico = historico.id');
        $this->imazoncursos->join('aluno','historico.id_aluno = aluno.id_fic');
        $this->imazoncursos->where_in('id_certificado', $ids_certificados);
        
        return $this->imazoncursos->get()->result_array();
    }
    
    private function update_first_idCertificado($data_update)
    {
        //$endereco = $data_update['endereco'].', '.$data_update['numero'].', '.$data_update['complemento'].', '.$data_update['bairro'].', '.$data_update['cidade'].', '.$data_update['estado'].', cep: '.$data_update['cep'];
        //$endereco = (string)$endereco;
        $this->imazoncursos->set('situacao', 1);
        //$this->imazoncursos->set('endereco', $endereco);
        $this->imazoncursos->where('id_certificado', $data_update['id_certificado']);
        $this->imazoncursos->update('certificado');
    }
    
    private function insert_copy_certificado($ids_certificados)
    {
        foreach ($ids_certificados as $id)
        {
            $array_id_certificado[] = $id['id_certificado'];
        }
        
        $certificados = $this->get_certificados_by_id($array_id_certificado);
        
        foreach ($certificados as $certificado)
        {
            $data_update = ['id_certificado'=>$certificado['id_certificado'], 'endereco'=>$certificado['endereco_aluno'],
                            'numero'=>$certificado['numero'],'complemento'=>$certificado['complemento'], 
                            'bairro'=>$certificado['bairro'], 'cidade'=>$certificado['cidade'], 
                            'estado'=>$certificado['estado'], 'cep'=>$certificado['cep'] ];
            
            $this->update_first_idCertificado( $data_update );
            
            unset($certificado['id_certificado']);
            
            //$certificado['situacao'] = 1;
            $certificado_endereco = $certificado['endereco_aluno'].', '.$certificado['numero'].', '.$certificado['complemento'].', '.$certificado['bairro'].', '.$certificado['cidade'].', '.$certificado['estado'].', cep: '.$certificado['cep'];
            $certificado_endereco = (string)$certificado_endereco;
            
            $certificado_add = ['id_historico'=>$certificado['id_historico'],'codigo_programa'=>$certificado['codigo_programa'], 'data_registro'=>date('Y-m-d H:i:s'), 'situacao'=>1, 'rastreamento'=>$certificado['rastreamento'], 'transacao'=>$certificado['transacao'],'id_tipo'=>$certificado['id_tipo'], 'endereco'=>$certificado_endereco];
            
            $this->imazoncursos->insert('certificado', $certificado_add);
            $last_id_certificados[] = $this->imazoncursos->insert_id();
        }
        
        return $last_id_certificados;
    }
    
    private function insert_news_id($id_lote, $ids_certificados)
    {
        if( !empty($id_lote) && ( count($ids_certificados)!==0 ) )
        {
            
            foreach ($ids_certificados as $id_certificado)
            {
                $certificado_lote_certificado = ['id_lote'=>$id_lote, 'id_certificado'=>$id_certificado];
                $this->imazoncursos->insert('certificado_lote_certificado', $certificado_lote_certificado);
            }
            
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    }
    
    public function set_lote_envio($id_lote)
    {
        $this->imazoncursos->set('situacao', 1);
        $this->imazoncursos->set('data_emissao', date('Y-m-d H:i:s') );
        $this->imazoncursos->where('id_lote',$id_lote);
        
        $is_update_lote =   $this->imazoncursos->update('certificado_lote');
        
        if($is_update_lote)
        {
            $ids_certificados = $this->get_lote_certificado_by_idLote($id_lote);
            
            if( !empty($ids_certificados) )
            {
                $news_ids_certificados = $this->insert_copy_certificado($ids_certificados);
                
                if( !empty($news_ids_certificados) )
                {
                    $is_insert = $this->insert_news_id( $id_lote, $news_ids_certificados );
                    
                    if($is_insert)
                    {
                        return json_encode( ['status'=>1, 'msg'=>'sucesso'] );
                    }
                    else
                    {
                        return json_encode( ['status'=>0, 'msg'=>'Falha na transação de inserção'] );
                    }
                }
            }
            else
            {
                return json_encode( ['status'=>0, 'msg'=>'Falha em retornar os id_certificado do Lote'] );
            }
        }
        else
        {
            return json_encode( ['status'=>0, 'msg'=>'Falha em atualizar a situacao do Lote'] );
        }
    }
    
    public function getCertificadoLote()
    {
        $this->imazoncursos->select("id_lote, url, data_criacao");
        $this->imazoncursos->from('certificado_lote');
        $this->imazoncursos->where_in('situacao', 0);
        
        return $this->imazoncursos->get()->result_array();
    }
    
    public function update_situacao_pendente($id_certificado)
    {
        $this->imazoncursos->set('situacao', 3);
        $this->imazoncursos->where('id_certificado',$id_certificado);
        
        return  $this->imazoncursos->update('certificado');     
    }
    
    public function get_eletronicos_nao_enviados($limit=null)
    {
        if($limit===null || empty($limit) || $limit===0)
        {
            return false;
        }
        else
        {
            $query = $this->imazoncursos->query("SELECT COUNT(A.id_fic) AS quantidade,H.id_historico, 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
                                                    GROUP BY A.id_fic                                                
                                                    ORDER BY A.estado ASC, A.nome ASC
                                                    LIMIT ".$limit);
            
//            $query = $this->imazoncursos->query("SELECT H.id_historico, 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
//                                                ORDER BY A.estado ASC, A.nome ASC
//                                                LIMIT ".$limit);
            return $query->result_array();
        }
    }
    
    public function get_total_eletronicos_nao_enviados()
    {
        $query = $this->imazoncursos->query("SELECT count(H.id) as id_historico
                                                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
                                                ORDER BY A.estado ASC, A.nome ASC");
        return $query->result_array();
    }
    
    public function check_lote_certificado($ids_certificados)
    {
        $this->imazoncursos->select();
        $this->imazoncursos->from('certificado_lote_certificado');
        $this->imazoncursos->where_in('id_certificado', $ids_certificados);
       
        $check_lote_certificado = $this->imazoncursos->get()->result_array();
        
        if( count($check_lote_certificado)> 0 )
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    public function add_lote_certificado($certificado_lote)
    {
        $this->imazoncursos->insert('certificado_lote', $certificado_lote);
        $last_id_lote = $this->imazoncursos->insert_id();
        
        return $last_id_lote;
    }
    
    public function update_situacao_certificado($ids_certificados)
    {
        $this->imazoncursos->set('situacao', 2);
        $this->imazoncursos->where_in('id_certificado',$ids_certificados);
        return  $this->imazoncursos->update('certificado');
    }
    
    public function update_url_by_idLote($id_lote, $url)
    {
        $url = str_replace("certificado_eletronico/","",$url);
        $this->imazoncursos->set('url', $url);
        $this->imazoncursos->where('id_lote', $id_lote);
        
        $this->imazoncursos->update('certificado_lote');
    }
    
    public function add_certificado_lote_certificado($id_lote, $quantidade_certificado)
    {
        foreach ($quantidade_certificado as $quantidade)
        {
            $certificado_lote_certificado = array('id_lote'=>$id_lote, 'id_certificado'=>$quantidade);
            $result[] = $this->imazoncursos->insert('certificado_lote_certificado', $certificado_lote_certificado);
        }
        
        return $result;
    }
}