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

class Diario_oficial extends MX_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('pje_model');
        if (!$this->session->userdata('admin')) redirect('admin/login');
    }

    // ── INDEX — listagem principal ─────────────────────────────
    public function index() {
        $admin  = $this->session->userdata('admin');
        $access = $admin['user_role'];
        $uid    = $admin['id'];

        // Filtros via GET
        $f_adv      = (int)$this->input->get('adv_id');
        $f_dt_ini   = $this->input->get('dt_ini') ?: date('Y-m-d', strtotime('-30 days'));
        $f_dt_fim   = $this->input->get('dt_fim') ?: date('Y-m-d');
        $f_lida     = $this->input->get('lida');   // '' = todas | 0 = não lidas | 1 = lidas
        $f_tribunal = $this->input->get('tribunal');
        $f_busca    = $this->input->get('busca');
        $page       = max(1, (int)$this->input->get('page'));
        $per_page   = 30;

        // Se advogado (role 3) ou estagiário (role 4): filtra pelo próprio OAB
        if (in_array($access, [3, 4])) {
            $adv = $this->pje_model->get_advogado_by_user($uid);
            $f_adv = $adv ? $adv->id : -1;
        }

        $filters = compact('f_adv','f_dt_ini','f_dt_fim','f_lida','f_tribunal','f_busca');

        $data['publicacoes']    = $this->pje_model->get_publicacoes($filters, $page, $per_page);
        $data['total']          = $this->pje_model->count_publicacoes($filters);
        $data['nao_lidas']      = $this->pje_model->count_publicacoes(['f_lida'=>'0'] + $filters);
        $data['advogados']      = $this->pje_model->get_advogados_ativos();
        $data['tribunais']      = $this->pje_model->get_tribunais();
        $data['filters']        = $filters;
        $data['page']           = $page;
        $data['per_page']       = $per_page;
        $data['access']         = $access;
        $data['page_title']     = 'Diário Oficial PJe';
        $data['body']           = 'diario_oficial/index';
        $this->load->view('template/main', $data);
    }

    // ── VIEW — detalhe da publicação ───────────────────────────
    public function view($id) {
        $pub = $this->pje_model->get_publicacao($id);
        if (!$pub) show_404();

        // Marca como lida
        if (!$pub->lida) {
            $admin = $this->session->userdata('admin');
            $this->pje_model->marcar_lida($id, $admin['id']);
        }

        $data['pub']        = $pub;
        $data['page_title'] = 'Publicação PJe';
        $data['body']       = 'diario_oficial/view';
        $this->load->view('template/main', $data);
    }

    // ── MARCAR LIDA (AJAX) ─────────────────────────────────────
    public function marcar_lida_ajax() {
        $id    = (int)$this->input->post('id');
        $admin = $this->session->userdata('admin');
        $this->pje_model->marcar_lida($id, $admin['id']);
        echo json_encode(['success' => true]);
    }

    // ── MARCAR TODAS LIDAS ─────────────────────────────────────
    public function marcar_todas_lidas() {
        $admin  = $this->session->userdata('admin');
        $adv_id = (int)$this->input->post('adv_id');
        $this->pje_model->marcar_todas_lidas($adv_id, $admin['id']);
        $this->session->set_flashdata('message', 'Todas as publicações foram marcadas como lidas.');
        redirect('admin/diario_oficial');
    }

    // ── CONFIG COOKIES ─────────────────────────────────────────
    public function config_cookies() {
        if ($this->input->post('submitted')) {
            $pcp  = trim($this->input->post('pcp_session'));
            $xsrf = trim($this->input->post('xsrf_token'));
            $exp  = $this->input->post('expires_at');
            $exists = $this->db->get('pje_config')->num_rows();
            $row = ['pcp_session'=>$pcp, 'xsrf_token'=>$xsrf, 'expires_at'=>$exp ?: null];
            if ($exists > 0) $this->db->update('pje_config', $row);
            else             $this->db->insert('pje_config', $row);
            $this->session->set_flashdata('message', 'Cookies atualizados!');
            redirect('admin/diario_oficial/config_cookies');
        }
        $data['config']     = $this->db->get('pje_config')->row();
        $data['page_title'] = 'PJe — Configurar Cookies';
        $data['body']       = 'diario_oficial/config_cookies';
        $this->load->view('template/main', $data);
    }

    // ── TESTAR COOKIES (AJAX) ──────────────────────────────────
    public function testar_cookies() {
        $cfg = $this->db->get('pje_config')->row();
        if (!$cfg) { echo json_encode(['success'=>false,'error'=>'Sem cookies']); return; }
        $url = $cfg->worker_url.'?action=comunicacoes&secret=bp_advocacia_pje_2026&oab=31577&uf=PE&pagina=1&tamanho=2'
             .'&pcp='.urlencode($cfg->pcp_session).'&xsrf='.urlencode($cfg->xsrf_token);
        $ch = curl_init($url);
        curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_TIMEOUT=>20,CURLOPT_SSL_VERIFYPEER=>false]);
        $resp = curl_exec($ch); curl_close($ch);
        $d = json_decode($resp, true);
        echo json_encode([
            'success' => $d['success'] ?? false,
            'total'   => $d['total'] ?? 0,
            'message' => ($d['success']??false) ? "✓ Conexão OK! {$d['total']} publicações encontradas." : "✗ Falhou: ".($d['data']['message']??'erro'),
        ]);
    }

    // ── ADVOGADOS ──────────────────────────────────────────────
    public function advogados() {
        if ($this->input->post('submitted')) {
            $id = (int)$this->input->post('id');
            $row = [
                'nome'    => $this->input->post('nome'),
                'oab'     => $this->input->post('oab'),
                'uf_oab'  => strtoupper($this->input->post('uf_oab')),
                'user_id' => (int)$this->input->post('user_id') ?: null,
                'ativo'   => (int)$this->input->post('ativo'),
            ];
            if ($id > 0) $this->db->where('id',$id)->update('pje_advogados',$row);
            else         $this->db->insert('pje_advogados',$row);
            $this->session->set_flashdata('message','Advogado salvo!');
            redirect('admin/diario_oficial/advogados');
        }
        $data['advogados']  = $this->db->order_by('nome','ASC')->get('pje_advogados')->result();
        $data['usuarios']   = $this->db->where('user_role',3)->order_by('name','ASC')->get('users')->result();
        $data['page_title'] = 'PJe — Advogados Monitorados';
        $data['body']       = 'diario_oficial/advogados';
        $this->load->view('template/main', $data);
    }

    // ── WEBHOOK — recebe publicações do cron/GAS ───────────────
    public function webhook() {
        $secret = $this->input->get_post('secret');
        if ($secret !== 'bp_advocacia_pje_2026') {
            http_response_code(401); echo 'Unauthorized'; return;
        }
        $json = file_get_contents('php://input') ?: $this->input->post('data');
        $items = json_decode($json, true);
        if (empty($items)) { echo json_encode(['saved'=>0]); return; }

        $saved = 0;
        foreach ($items as $item) {
            $adv_id = (int)($item['advogado_id'] ?? 0);
            $cid    = (string)($item['comunicacao_id'] ?? '');
            if (!$adv_id || !$cid) continue;
            $check = $this->db->where('comunicacao_id',$cid)->where('advogado_id',$adv_id)->count_all_results('pje_publicacoes');
            if ($check > 0) continue;
            $this->db->insert('pje_publicacoes', [
                'advogado_id'      => $adv_id,
                'comunicacao_id'   => $cid,
                'titulo'           => mb_substr($item['tipo_comunicacao'] ?? 'Publicação PJe', 0, 200),
                'tipo_comunicacao' => $item['tipo_comunicacao'] ?? '',
                'conteudo'         => strip_tags($item['conteudo'] ?? ''),
                'numero_processo'  => $item['numero_processo'] ?? '',
                'processo_mascara' => $item['processo_mascara'] ?? '',
                'tribunal'         => $item['tribunal'] ?? '',
                'orgao'            => mb_substr($item['orgao'] ?? '', 0, 300),
                'link'             => $item['link'] ?? '',
                'data_publicacao'  => $item['data_publicacao'] ?? null,
                'created_at'       => date('Y-m-d H:i:s'),
            ]);
            $saved++;
        }
        echo json_encode(['success'=>true, 'saved'=>$saved]);
    }
}
