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

class Diario_oficial extends MX_Controller {

    private $webhook_secret = 'bp_advocacia_pje_2026';
    private $gas_webapp_url = 'https://script.google.com/macros/s/AKfycbxkKRy9Cfvj-EpEyS9bukpL-bhOjdpI6ANFx8Ysa2yQ_AKG3xdzEj7JhTa8DlYDjLbU/exec';

    public function __construct() {
        // Interceptador HTTP API (Lê POST ou GET do Google Script antes da barreira de login)
        $api_mode = isset($_POST['api_mode']) ? $_POST['api_mode'] : (isset($_GET['api_mode']) ? $_GET['api_mode'] : null);

        if ($api_mode == '1') {
            $this->load->model('pje_model');
            $this->processar_api_webhook();
            exit; 
        }

        // Fluxo Convencional do Painel Visual (Exige Sessão do usuário)
        parent::__construct();
        $this->load->model('pje_model');
    }

    // ----------------------------------------------------------------
    // Receptor Webhook da API (POST/GET unificados)
    private function processar_api_webhook() {
        header('Content-Type: application/json');

        $secret = $this->input->post('secret') ?: $this->input->get('secret');
        if ($secret !== $this->webhook_secret) {
            http_response_code(401);
            echo json_encode(['ok' => false, 'erro' => 'Token invalido']);
            return;
        }

        $chave = $this->input->post('chave') ?: $this->input->get('chave');
        if (empty($chave)) {
            http_response_code(400);
            echo json_encode(['ok' => false, 'erro' => 'Dados incompletos']);
            return;
        }

        // Bloqueio de Registros Duplicados (Idempotência)
        if ($this->pje_model->publicacao_existe($chave)) {
            http_response_code(200);
            echo json_encode(['ok' => true, 'salvos' => 0, 'status' => 'duplicado']);
            return;
        }

        $insert = [
            'advogado_id'             => (int)($this->input->post('adv_id') ?: $this->input->get('adv_id')),
            'comunicacao_id'          => $this->input->post('com_id') ?: $this->input->get('com_id'),
            'titulo'                  => 'Intimação Diário Oficial',
            'tipo_comunicacao'        => 'Intimação',
            'conteudo'                => $this->input->post('txt') ?? '',
            'numero_processo'         => $this->input->post('proc') ?? '',
            'processo_mascara'        => $this->input->post('proc_masc') ?? '',
            'tribunal'                => $this->input->post('trib') ?: 'TJPE',
            'orgao'                   => $this->input->post('trib') ?: 'TJPE',
            'link'                    => $this->input->post('link') ?? '',
            'data_publicacao'         => ($this->input->post('data') ?: $this->input->get('data')) ?: date('Y-m-d'),
            'lida'                    => 0,
            'fonte'                   => 'email',
            'email_origem'            => 'oabpe@recortedigital.adv.br',
            'chave_idempotencia'      => $chave,
            'created_at'              => date('Y-m-d H:i:s'),
        ];

        $salvou = $this->pje_model->inserir_publicacao($insert);
        
        http_response_code(200);
        echo json_encode(['ok' => true, 'salvos' => $salvou ? 1 : 0]);
    }

    // ----------------------------------------------------------------
    // Tela Inicial de Listagem do Painel
    public function index() {
        $user_id   = $this->session->userdata('id');
        $user_role = $this->session->userdata('user_role');
        $access    = ($user_role == 1) ? 1 : 0;

        $f_dt_ini  = $this->input->get('dt_ini')  ?: date('Y-m-01');
        $f_dt_fim  = $this->input->get('dt_fim')  ?: date('Y-m-d');
        $f_adv     = $this->input->get('adv_id')  ?: '';
        $f_lida    = $this->input->get('lida');
        $f_lida    = ($f_lida === null) ? '' : $f_lida;
        $f_tribunal= $this->input->get('tribunal') ?: '';
        $f_busca   = $this->input->get('busca')   ?: '';
        $page      = max(1, (int)$this->input->get('page'));
        $per_page  = 25;

        if (!$access) {
            $adv = $this->pje_model->advogado_por_user($user_id);
            $f_adv = $adv ? $adv->id : 0;
        }

        $filtros = [
            'dt_ini'   => $f_dt_ini,
            'dt_fim'   => $f_dt_fim,
            'adv_id'   => $f_adv,
            'lida'     => $f_lida,
            'tribunal' => $f_tribunal,
            'busca'    => $f_busca,
            'limite'   => $per_page,
            'offset'   => ($page - 1) * $per_page,
        ];

        $data['publicacoes'] = $this->pje_model->listar_publicacoes($filtros);
        $data['total']       = $this->pje_model->contar_publicacoes($filtros);
        $data['nao_lidas']   = $this->pje_model->contar_publicacoes(array_merge($filtros, ['lida' => '0', 'limite' => null, 'offset' => null]));
        $data['advogados']   = $this->pje_model->listar_advogados();
        $data['tribunais']   = $this->pje_model->listar_tribunais();
        $data['access']      = $access;
        $data['page']        = $page;
        $data['per_page']    = $per_page;
        $data['filters']     = [
            'f_dt_ini'   => $f_dt_ini,
            'f_dt_fim'   => $f_dt_fim,
            'f_adv'      => $f_adv,
            'f_lida'     => $f_lida,
            'f_tribunal' => $f_tribunal,
            'f_busca'    => $f_busca,
        ];
        $data['page_title']  = 'Diário Oficial PJe';
        $data['body']        = 'diario_oficial/index';
        $this->load->view('template/main', $data);
    }

    // ----------------------------------------------------------------
    // Visualização Individual da Intimação
    public function view($id = false) {
        if (!$id) redirect('admin/diario_oficial');
        $pub = $this->pje_model->get_publicacao($id);
        if (!$pub) redirect('admin/diario_oficial');

        if (!$pub->lida) {
            $this->pje_model->marcar_lida($id, $this->session->userdata('id'));
        }

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

    // ----------------------------------------------------------------
    // Configuração de Advogados Monitorados
    public function advogados() {
        $data['advogados']  = $this->pje_model->listar_advogados();
        $data['page_title'] = 'Advogados Monitorados';
        $data['body']       = 'diario_oficial/advogados';
        $this->load->view('template/main', $data);
    }

    public function salvar_advogado() {
        $id    = (int) $this->input->post('id');
        $dados = [
            'nome'          => $this->input->post('nome'),
            'oab'           => $this->input->post('oab'),
            'uf_oab'        => $this->input->post('uf_oab'),
            'email_recorte' => $this->input->post('email_recorte'),
            'ativo'         => $this->input->post('ativo') ? 1 : 0,
        ];
        if ($id) {
            $this->pje_model->atualizar_advogado($id, $dados);
        } else {
            $dados['user_id']    = $this->session->userdata('id');
            $dados['created_at'] = date('Y-m-d H:i:s');
            $this->pje_model->inserir_advogado($dados);
        }
        $this->session->set_flashdata('message', 'Advogado salvo com sucesso.');
        redirect('admin/diario_oficial/advogados');
    }

    // ----------------------------------------------------------------
    // Botão de Sincronização Manual Instantânea via Painel
    public function sincronizar() {
        header('Content-Type: application/json');
        
        $url = $this->gas_webapp_url;
        if (!empty($url)) {
            $ch = curl_init($url . '?executar=manual');
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_TIMEOUT, 35);
            curl_exec($ch);
            curl_close($ch);
        }

        echo json_encode([
            'ok'   => true, 
            'msg'  => 'Sincronização executada com sucesso! Atualize a página para listar as novas publicações.'
        ]);
    }

    // ----------------------------------------------------------------
    // Ações de Leitura (Ajax / Lote)
    public function marcar_lida_ajax() {
        header('Content-Type: application/json');
        $id = (int) $this->input->post('id');
        if ($id) {
            $this->pje_model->marcar_lida($id, $this->session->userdata('id'));
            echo json_encode(['success' => true]);
        } else {
            echo json_encode(['success' => false]);
        }
    }

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