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

/**
 * Controller: Diario_oficial
 * Módulo: admin
 * Funções: listar publicações + receber webhook do Google Apps Script
 */
class Diario_oficial extends MX_Controller {

    private $webhook_secret = 'bp_advocacia_pje_2026';

    public function __construct() {
        parent::__construct();
        $this->load->model('pje_model');
        $this->load->helper(['url', 'form']);
    }

    // ---------------------------------------------------------------
    // WEBHOOK — recebe POST do Google Apps Script
    // URL: /admin/diario_oficial/webhook
    // ---------------------------------------------------------------
    public function webhook() {
        // Só aceita POST
        if ($this->input->server('REQUEST_METHOD') !== 'POST') {
            $this->_json(['ok' => false, 'erro' => 'Metodo invalido'], 405);
            return;
        }

        // Valida secret no header ou query string
        $secret = $this->input->get_request_header('X-Secret-Key', TRUE)
                ?: $this->input->get('secret');

        if ($secret !== $this->webhook_secret) {
            $this->_json(['ok' => false, 'erro' => 'Nao autorizado'], 401);
            return;
        }

        // Lê o JSON do corpo
        $raw  = file_get_contents('php://input');
        $data = json_decode($raw, true);

        if (!$data || !isset($data['publicacoes']) || !is_array($data['publicacoes'])) {
            $this->_json(['ok' => false, 'erro' => 'Payload invalido'], 400);
            return;
        }

        $salvos   = 0;
        $repetidos = 0;
        $erros    = 0;

        foreach ($data['publicacoes'] as $pub) {
            // Campos obrigatórios mínimos
            if (empty($pub['chave_idempotencia']) || empty($pub['advogado_id'])) {
                $erros++;
                continue;
            }

            // Verifica duplicidade pela chave única
            if ($this->pje_model->publicacao_existe($pub['chave_idempotencia'])) {
                $repetidos++;
                continue;
            }

            $insert = [
                'advogado_id'              => (int) $pub['advogado_id'],
                'comunicacao_id'           => isset($pub['comunicacao_id']) ? $pub['comunicacao_id'] : null,
                'titulo'                   => isset($pub['titulo']) ? $pub['titulo'] : 'Publicação via e-mail',
                'tipo_comunicacao'         => isset($pub['tipo_comunicacao']) ? $pub['tipo_comunicacao'] : 'Intimação',
                'conteudo'                 => isset($pub['conteudo']) ? $pub['conteudo'] : '',
                'numero_processo'          => isset($pub['numero_processo']) ? $pub['numero_processo'] : '',
                'processo_mascara'         => isset($pub['processo_mascara']) ? $pub['processo_mascara'] : '',
                'tribunal'                 => isset($pub['tribunal']) ? $pub['tribunal'] : '',
                'orgao'                    => isset($pub['orgao']) ? $pub['orgao'] : '',
                'link'                     => isset($pub['link']) ? $pub['link'] : '',
                'data_publicacao'          => isset($pub['data_publicacao']) ? $pub['data_publicacao'] : date('Y-m-d'),
                'lida'                     => 0,
                'fonte'                    => 'email',
                'email_origem'             => isset($pub['email_origem']) ? $pub['email_origem'] : '',
                'numero_publicacao_email'  => isset($pub['numero_publicacao_email']) ? (int)$pub['numero_publicacao_email'] : null,
                'chave_idempotencia'       => $pub['chave_idempotencia'],
                'created_at'               => date('Y-m-d H:i:s'),
            ];

            if ($this->pje_model->inserir_publicacao($insert)) {
                $salvos++;
            } else {
                $erros++;
            }
        }

        $this->_json([
            'ok'        => true,
            'salvos'    => $salvos,
            'repetidos' => $repetidos,
            'erros'     => $erros,
        ]);
    }

    // ---------------------------------------------------------------
    // INDEX — lista publicações (tela principal)
    // ---------------------------------------------------------------
    public function index() {
        $this->load->view('diario_oficial/index');
    }

    // ---------------------------------------------------------------
    // Advogados — gerenciar quais advogados monitorar
    // ---------------------------------------------------------------
    public function advogados() {
        $data['advogados'] = $this->pje_model->listar_advogados();
        $this->load->view('diario_oficial/advogados', $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);
        }

        redirect('admin/diario_oficial/advogados');
    }

    // ---------------------------------------------------------------
    // Helpers privados
    // ---------------------------------------------------------------
    private function _json($data, $status = 200) {
        http_response_code($status);
        header('Content-Type: application/json');
        echo json_encode($data);
        exit;
    }
}
