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

class Pje_model extends CI_Model {

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

    // ---------------------------------------------------------------
    // ADVOGADOS
    // ---------------------------------------------------------------
    public function listar_advogados() {
        return $this->db->where('ativo', 1)->get('pje_advogados')->result_array();
    }

    public function inserir_advogado($dados) {
        return $this->db->insert('pje_advogados', $dados);
    }

    public function atualizar_advogado($id, $dados) {
        return $this->db->where('id', $id)->update('pje_advogados', $dados);
    }

    // Retorna advogados ativos que têm email_recorte preenchido
    public function advogados_com_email() {
        return $this->db
            ->where('ativo', 1)
            ->where('email_recorte !=', '')
            ->where('email_recorte IS NOT NULL', null, false)
            ->get('pje_advogados')
            ->result_array();
    }

    // ---------------------------------------------------------------
    // PUBLICAÇÕES
    // ---------------------------------------------------------------
    public function publicacao_existe($chave) {
        return $this->db
            ->where('chave_idempotencia', $chave)
            ->count_all_results('pje_publicacoes') > 0;
    }

    public function inserir_publicacao($dados) {
        return $this->db->insert('pje_publicacoes', $dados);
    }

    public function listar_publicacoes($filtros = []) {
        $this->db->select('p.*, a.nome AS nome_advogado, a.oab, a.uf_oab');
        $this->db->from('pje_publicacoes p');
        $this->db->join('pje_advogados a', 'a.id = p.advogado_id', 'left');

        if (!empty($filtros['advogado_id'])) {
            $this->db->where('p.advogado_id', $filtros['advogado_id']);
        }
        if (!empty($filtros['data_inicio'])) {
            $this->db->where('p.data_publicacao >=', $filtros['data_inicio']);
        }
        if (!empty($filtros['data_fim'])) {
            $this->db->where('p.data_publicacao <=', $filtros['data_fim']);
        }
        if (isset($filtros['lida']) && $filtros['lida'] !== '') {
            $this->db->where('p.lida', $filtros['lida']);
        }
        if (!empty($filtros['busca'])) {
            $this->db->group_start();
            $this->db->like('p.numero_processo', $filtros['busca']);
            $this->db->or_like('p.conteudo', $filtros['busca']);
            $this->db->group_end();
        }

        $this->db->order_by('p.data_publicacao', 'DESC');
        $this->db->order_by('p.created_at', 'DESC');

        if (!empty($filtros['limite'])) {
            $this->db->limit($filtros['limite'], $filtros['offset'] ?? 0);
        }

        return $this->db->get()->result_array();
    }

    public function contar_publicacoes($filtros = []) {
        $this->db->from('pje_publicacoes p');

        if (!empty($filtros['advogado_id'])) {
            $this->db->where('p.advogado_id', $filtros['advogado_id']);
        }
        if (!empty($filtros['data_inicio'])) {
            $this->db->where('p.data_publicacao >=', $filtros['data_inicio']);
        }
        if (!empty($filtros['data_fim'])) {
            $this->db->where('p.data_publicacao <=', $filtros['data_fim']);
        }
        if (isset($filtros['lida']) && $filtros['lida'] !== '') {
            $this->db->where('p.lida', $filtros['lida']);
        }

        return $this->db->count_all_results();
    }

    public function marcar_lida($id, $user_id) {
        return $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($advogado_id, $user_id) {
        return $this->db->where('advogado_id', $advogado_id)->where('lida', 0)
            ->update('pje_publicacoes', [
                'lida'    => 1,
                'lida_em' => date('Y-m-d H:i:s'),
                'lida_por' => $user_id,
            ]);
    }

    public function stats_publicacoes() {
        $hoje   = date('Y-m-d');
        $semana = date('Y-m-d', strtotime('-7 days'));

        return [
            'total'         => $this->db->count_all('pje_publicacoes'),
            'nao_lidas'     => $this->db->where('lida', 0)->count_all_results('pje_publicacoes'),
            'hoje'          => $this->db->where('data_publicacao', $hoje)->count_all_results('pje_publicacoes'),
            'semana'        => $this->db->where('data_publicacao >=', $semana)->count_all_results('pje_publicacoes'),
        ];
    }
}
