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

class Diario_oficial extends MX_Controller {

    private $webhook_secret = 'bp_advocacia_pje_2026';

    // Cole aqui a URL do seu GAS Web App após publicar
    // Formato: https://script.google.com/macros/s/SEU_ID/exec
    private $gas_webapp_url = 'COLE_AQUI_A_URL_DO_GAS_WEB_APP';

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

    // ---------------------------------------------------------------
    // INDEX
    // ---------------------------------------------------------------
    public function index() {
        $data['stats']      = $this->pje_model->stats_publicacoes();
        $data['advogados']  = $this->pje_model->listar_advogados();
        $data['publicacoes'] = $this->pje_model->listar_publicacoes(['limite' => 50, 'offset' => 0]);
        $this->load->view('diario_oficial/index', $data);
    }

    // ---------------------------------------------------------------
    // SINCRONIZAR — botão manual chama o GAS Web App
    // Retorna JSON para o AJAX da página
    // ---------------------------------------------------------------
    public function sincronizar() {
        header('Content-Type: application/json');

        if ($this->gas_webapp_url === 'https://script.google.com/macros/s/AKfycbzxucmC_xbM3O9U0c5gT7JAyMA42lDJqm84JpkEYjDMsQdpIXsVW-iptRQ-ZMlhKZF4/exec') {
            echo json_encode(['ok' => false, 'msg' => 'URL do GAS Web App não configurada no controller.']);
            return;
        }

        $url = $this->gas_webapp_url . '?secret=' . urlencode($this->webhook_secret);

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        $resp = curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($code === 200 && $resp) {
            $json = json_decode($resp, true);
            if ($json && isset($json['ok'])) {
                $enviados = isset($json['enviados']) ? (int)$json['enviados'] : 0;
                echo json_encode([
                    'ok'  => true,
                    'msg' => $enviados > 0
                        ? $enviados . ' publicação(ões) nova(s) importada(s) com sucesso.'
                        : 'Sincronização concluída. Nenhuma publicação nova encontrada.',
                    'enviados' => $enviados,
                ]);
                return;
            }
        }

        echo json_encode(['ok' => false, 'msg' => 'Falha ao conectar com o serviço de sincronização (HTTP ' . $code . ').']);
    }

    // ---------------------------------------------------------------
    // WEBHOOK — recebe POST do GAS (trigger automático)
    // ---------------------------------------------------------------
    public function webhook() {
        if ($this->input->server('REQUEST_METHOD') !== 'POST') {
            $this->_json(['ok' => false, 'erro' => 'Metodo invalido'], 405);
            return;
        }

        $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;
        }

        $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) {
            if (empty($pub['chave_idempotencia']) || empty($pub['advogado_id'])) {
                $erros++;
                continue;
            }

            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'),
            ];

            $this->pje_model->inserir_publicacao($insert) ? $salvos++ : $erros++;
        }

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

    // ---------------------------------------------------------------
    // ADVOGADOS
    // ---------------------------------------------------------------
    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');
    }

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