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

class Pje_model extends CI_Model {

    public function get_publicacoes($f, $page = 1, $per_page = 30) {
        $this->_apply_filters($f);
        $this->db->order_by('p.data_publicacao','DESC');
        $this->db->order_by('p.id','DESC');
        $this->db->limit($per_page, ($page - 1) * $per_page);
        $this->db->select('p.*, a.nome as adv_nome, a.oab, a.uf_oab');
        $this->db->from('pje_publicacoes p');
        $this->db->join('pje_advogados a','a.id = p.advogado_id','left');
        return $this->db->get()->result();
    }

    public function count_publicacoes($f) {
        $this->_apply_filters($f);
        $this->db->from('pje_publicacoes p');
        $this->db->join('pje_advogados a','a.id = p.advogado_id','left');
        return $this->db->count_all_results();
    }

    private function _apply_filters($f) {
        // CI2 nao tem reset_query() — os wheres sao acumulados na mesma query
        if (!empty($f['f_adv']))      $this->db->where('p.advogado_id', (int)$f['f_adv']);
        if (!empty($f['f_dt_ini']))   $this->db->where('p.data_publicacao >=', $f['f_dt_ini']);
        if (!empty($f['f_dt_fim']))   $this->db->where('p.data_publicacao <=', $f['f_dt_fim']);
        if (isset($f['f_lida']) && $f['f_lida'] !== '' && $f['f_lida'] !== null)
                                      $this->db->where('p.lida', (int)$f['f_lida']);
        if (!empty($f['f_tribunal'])) $this->db->where('p.tribunal', $f['f_tribunal']);
        if (!empty($f['f_busca'])) {
            $b = $f['f_busca'];
            $this->db->where('(p.numero_processo LIKE '.$this->db->escape('%'.$b.'%')
                .' OR p.processo_mascara LIKE '.$this->db->escape('%'.$b.'%')
                .' OR p.orgao LIKE '.$this->db->escape('%'.$b.'%')
                .' OR p.conteudo LIKE '.$this->db->escape('%'.$b.'%').')'
            , NULL, FALSE);
        }
    }

    public function get_publicacao($id) {
        $this->db->select('p.*, a.nome as adv_nome, a.oab, a.uf_oab');
        $this->db->from('pje_publicacoes p');
        $this->db->join('pje_advogados a','a.id = p.advogado_id','left');
        $this->db->where('p.id', $id);
        return $this->db->get()->row();
    }

    public function marcar_lida($id, $user_id) {
        $this->db->where('id', $id)->update('pje_publicacoes', [
            'lida'    => 1,
            'lida_em' => date('Y-m-d H:i:s'),
            'lida_por'=> $user_id,
        ]);
    }

    public function marcar_todas_lidas($adv_id, $user_id) {
        $this->db->where('lida', 0);
        if ($adv_id > 0) $this->db->where('advogado_id', $adv_id);
        $this->db->update('pje_publicacoes', [
            'lida'    => 1,
            'lida_em' => date('Y-m-d H:i:s'),
            'lida_por'=> $user_id,
        ]);
    }

    public function get_advogados_ativos() {
        return $this->db->where('ativo',1)->order_by('nome','ASC')->get('pje_advogados')->result();
    }

    public function get_advogado_by_user($user_id) {
        return $this->db->where('user_id', $user_id)->where('ativo',1)->get('pje_advogados')->row();
    }

    public function get_tribunais() {
        $r = $this->db->distinct()->select('tribunal')->where('tribunal IS NOT NULL')->where('tribunal !=','')->order_by('tribunal','ASC')->get('pje_publicacoes')->result();
        return array_column(json_decode(json_encode($r), true), 'tribunal');
    }
}
