/**
 * Cloudflare Worker — Proxy PJe Comunica
 * Breno Paiva Advocacia
 * 
 * Deploy: https://dash.cloudflare.com -> Workers & Pages -> Create Worker
 * Cole este código e clique em Deploy
 */

const ALLOWED_ORIGIN = 'https://sistema.brenopaiva.com.br';
const SECRET_KEY = 'bp_advocacia_pje_2026'; // Mesma chave do sistema

export default {
  async fetch(request, env) {

    // CORS preflight
    if (request.method === 'OPTIONS') {
      return new Response(null, {
        headers: {
          'Access-Control-Allow-Origin': ALLOWED_ORIGIN,
          'Access-Control-Allow-Methods': 'GET, POST',
          'Access-Control-Allow-Headers': 'Content-Type, X-Secret-Key',
        }
      });
    }

    const url = new URL(request.url);
    const secret = request.headers.get('X-Secret-Key') || url.searchParams.get('secret');

    // Valida chave secreta
    if (secret !== SECRET_KEY) {
      return json({ error: 'Unauthorized' }, 401);
    }

    const action = url.searchParams.get('action') || 'comunicacoes';

    // ── AÇÃO: buscar comunicações por OAB ──
    if (action === 'comunicacoes') {
      const oab   = url.searchParams.get('oab') || '31577';
      const uf    = url.searchParams.get('uf')  || 'PE';
      const pagina = url.searchParams.get('pagina') || '1';
      const tamanho = url.searchParams.get('tamanho') || '50';

      const apiUrl = `https://comunicaapi.pje.jus.br/api/v1/comunicacao/advogado` +
        `?numeroOab=${oab}&ufOab=${uf}&pagina=${pagina}&tamanhoPagina=${tamanho}`;

      try {
        const resp = await fetch(apiUrl, {
          headers: {
            'Accept': 'application/json',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
            'Accept-Language': 'pt-BR,pt;q=0.9',
          },
          cf: {
            cacheTtl: 300,
            cacheEverything: false,
          }
        });

        const data = await resp.json();
        return json({ 
          success: true, 
          status: resp.status,
          oab, uf,
          data 
        });

      } catch (err) {
        return json({ success: false, error: err.message }, 500);
      }
    }

    // ── AÇÃO: buscar por nome ──
    if (action === 'por_nome') {
      const nome = url.searchParams.get('nome') || '';
      if (!nome) return json({ error: 'nome obrigatório' }, 400);

      const apiUrl = `https://comunica.pje.jus.br/api/v1/comunicacao` +
        `?nomeAdvogado=${encodeURIComponent(nome)}&page=0&size=50`;

      try {
        const resp = await fetch(apiUrl, {
          headers: {
            'Accept': 'application/json',
            'Referer': 'https://comunica.pje.jus.br/',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
          }
        });
        const data = await resp.json();
        return json({ success: true, status: resp.status, data });
      } catch (err) {
        return json({ success: false, error: err.message }, 500);
      }
    }

    // ── AÇÃO: health check ──
    if (action === 'ping') {
      return json({ success: true, message: 'Worker online', timestamp: new Date().toISOString() });
    }

    return json({ error: 'action inválida. Use: comunicacoes, por_nome, ping' }, 400);
  }
};

function json(data, status = 200) {
  return new Response(JSON.stringify(data), {
    status,
    headers: {
      'Content-Type': 'application/json',
      'Access-Control-Allow-Origin': '*',
    }
  });
}
