<?php
/**
 * PJe Comunica - Sincronização via Cloudflare Worker
 * Breno Paiva Advocacia
 * 
 * Cron Job cPanel: 0 0,12 * * * php /home/brenopai/public_html/brenopaiva.com.br/sistema/pje_cron.php
 * 
 * ANTES DE USAR: Substitua WORKER_URL pela URL do seu Worker após o deploy
 */

define('BASE_PATH', '/home/brenopai/public_html/brenopaiva.com.br/sistema');
// ↓ Substitua pela URL real do Worker após fazer deploy no Cloudflare
define('WORKER_URL', 'pje-proxy.breno-augusto.workers.dev');
define('WORKER_SECRET', 'bp_advocacia_pje_2026');

function log_msg($msg) {
    $log = BASE_PATH . '/logs/pje_cron.log';
    if (!is_dir(dirname($log))) mkdir(dirname($log), 0755, true);
    $line = '[' . date('Y-m-d H:i:s') . '] ' . $msg . "\n";
    file_put_contents($log, $line, FILE_APPEND);
    echo $line;
}

function worker_request($action, $params = []) {
    $url = WORKER_URL . '?action=' . $action . '&secret=' . WORKER_SECRET;
    foreach ($params as $k => $v) $url .= '&' . $k . '=' . urlencode($v);

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 30,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_HTTPHEADER     => ['Accept: application/json'],
    ]);
    $resp = curl_exec($ch);
    $err  = curl_error($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($err) { log_msg("  cURL erro: $err"); return false; }
    if ($code !== 200) { log_msg("  HTTP $code"); return false; }

    return json_decode($resp, true);
}

$db = mysqli_connect('localhost', 'brenopai_advteste', 'qaR2Pd751U', 'brenopai_advteste');
if (!$db) { log_msg('ERRO: banco de dados'); exit(1); }
mysqli_set_charset($db, 'utf8mb4');

log_msg('=== PJe Comunica via Cloudflare Worker ===');

// Testa se o Worker está online
$ping = worker_request('ping');
if (!$ping || !$ping['success']) {
    log_msg('ERRO: Worker offline ou URL não configurada. Verifique WORKER_URL no arquivo.');
    exit(1);
}
log_msg('✓ Worker online: ' . ($ping['message'] ?? ''));

// Busca advogados cadastrados
$r = mysqli_query($db, "SELECT * FROM pje_advogados WHERE ativo=1");
$advogados = [];
while ($adv = mysqli_fetch_assoc($r)) $advogados[] = $adv;

if (empty($advogados)) { log_msg('Nenhum advogado cadastrado.'); exit(0); }
log_msg(count($advogados) . ' advogado(s) para sincronizar.');

$total_novos = 0;

foreach ($advogados as $adv) {
    log_msg("Buscando: {$adv['nome']} (OAB {$adv['oab']}/{$adv['uf_oab']})");

    // Estratégia 1: por OAB
    $result = worker_request('comunicacoes', [
        'oab'    => $adv['oab'],
        'uf'     => $adv['uf_oab'],
        'pagina' => 1,
    ]);

    // Estratégia 2: por nome
    if (!$result || !$result['success'] || ($result['status'] ?? 0) !== 200) {
        log_msg("  OAB bloqueada, tentando por nome...");
        $result = worker_request('por_nome', ['nome' => $adv['nome']]);
    }

    if (!$result || !$result['success']) {
        log_msg("  ✗ Falhou para {$adv['nome']}");
        continue;
    }

    $dados = $result['data'] ?? [];
    $lista = $dados['content'] ?? $dados['comunicacoes'] ?? (isset($dados[0]) ? $dados : []);

    if (empty($lista)) { log_msg("  Sem publicações novas."); continue; }

    $novos = 0;
    foreach ($lista as $item) {
        $cid = (string)($item['id'] ?? $item['numeroComunicacao'] ?? $item['idComunicacao'] ?? '');
        if (!$cid) continue;

        $esc = mysqli_real_escape_string($db, $cid);
        $check = mysqli_query($db, "SELECT id FROM pje_publicacoes WHERE comunicacao_id='$esc' AND advogado_id={$adv['id']} LIMIT 1");
        if (mysqli_num_rows($check) > 0) continue;

        $dt      = null;
        foreach (['dataDisponibilizacao','dataHoraDisponibilizacao','dataPublicacao','data'] as $k) {
            if (!empty($item[$k])) { $dt = date('Y-m-d H:i:s', strtotime($item[$k])); break; }
        }

        $processo = mysqli_real_escape_string($db, $item['numeroProcesso'] ?? $item['numero'] ?? '');
        $titulo   = mysqli_real_escape_string($db, mb_substr($item['tipoDocumento'] ?? $item['tipo'] ?? 'Publicação PJe', 0, 200));
        $conteudo = mysqli_real_escape_string($db, $item['texto'] ?? $item['conteudo'] ?? $item['teor'] ?? '');
        $tribunal = mysqli_real_escape_string($db, $item['siglaOrgao'] ?? $item['tribunal'] ?? '');
        $dt_val   = $dt ? "'$dt'" : "NOW()";

        $sql = "INSERT INTO pje_publicacoes (advogado_id, comunicacao_id, titulo, conteudo, numero_processo, tribunal, data_publicacao, lida, created_at)
                VALUES ({$adv['id']}, '$esc', '$titulo', '$conteudo', '$processo', '$tribunal', $dt_val, 0, NOW())";
        if (mysqli_query($db, $sql)) $novos++;
    }

    log_msg("  ✓ $novos nova(s) publicação(ões)");
    $total_novos += $novos;
}

log_msg("=== Concluído: $total_novos nova(s) publicação(ões) ===");
mysqli_close($db);
