<?php
// webhook_receiver.php - Receptor de webhooks da Focus NFe

// Forçar exibição de erros
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Registrar início
$logFile = __DIR__ . '/logs/webhook_' . date('Y-m-d') . '.log';
file_put_contents($logFile, "\n" . str_repeat("=", 80) . "\n", FILE_APPEND);
file_put_contents($logFile, date('Y-m-d H:i:s') . " - REQUISIÇÃO RECEBIDA\n", FILE_APPEND);

// Obter dados da requisição
$method = $_SERVER['REQUEST_METHOD'];
$contentType = $_SERVER['CONTENT_TYPE'] ?? 'undefined';
$headers = getallheaders();

file_put_contents($logFile, date('Y-m-d H:i:s') . " - Método: $method\n", FILE_APPEND);
file_put_contents($logFile, date('Y-m-d H:i:s') . " - Content-Type: $contentType\n", FILE_APPEND);
file_put_contents($logFile, date('Y-m-d H:i:s') . " - Headers: " . json_encode($headers) . "\n", FILE_APPEND);

// Receber o corpo da requisição
$input = file_get_contents('php://input');
file_put_contents($logFile, date('Y-m-d H:i:s') . " - Corpo recebido:\n" . $input . "\n", FILE_APPEND);

// Sempre retornar 200 para a Focus
http_response_code(200);
header('Content-Type: application/json');

// Tentar decodificar como JSON
$dados = json_decode($input, true);

if ($dados) {
    file_put_contents($logFile, date('Y-m-d H:i:s') . " - ✅ JSON decodificado com sucesso\n", FILE_APPEND);
    
    // Se tem ref, é notificação de NFSe
    if (isset($dados['ref'])) {
        file_put_contents($logFile, date('Y-m-d H:i:s') . " - Notificação NFSe: ref={$dados['ref']}\n", FILE_APPEND);
        
        // Atualizar nota no banco
        try {
            require_once 'includes/funcoes.php';
            $pdo = conectarBanco();
            
            if ($pdo) {
                $stmt = $pdo->prepare("
                    UPDATE notas_fiscais 
                    SET status = ?, 
                        numero_nfse = ?, 
                        codigo_verificacao = ?, 
                        pdf_url = ?, 
                        xml_url = ?, 
                        data_autorizacao = ?,
                        atualizado_em = NOW()
                    WHERE ref = ?
                ");
                
                $stmt->execute([
                    $dados['status'] ?? null,
                    $dados['numero'] ?? $dados['numero_nfse'] ?? null,
                    $dados['codigo_verificacao'] ?? null,
                    $dados['url_danfse'] ?? $dados['pdf_url'] ?? null,
                    $dados['caminho_xml_nota_fiscal'] ?? $dados['xml_url'] ?? null,
                    $dados['data_emissao'] ?? date('Y-m-d H:i:s'),
                    $dados['ref']
                ]);
                
                file_put_contents($logFile, date('Y-m-d H:i:s') . " - ✅ Nota atualizada: " . $dados['ref'] . "\n", FILE_APPEND);
                echo json_encode(['sucesso' => true, 'mensagem' => 'Nota atualizada']);
                exit;
            }
        } catch (Exception $e) {
            file_put_contents($logFile, date('Y-m-d H:i:s') . " - ERRO: " . $e->getMessage() . "\n", FILE_APPEND);
        }
    }
    
    echo json_encode(['sucesso' => true, 'mensagem' => 'JSON recebido com sucesso']);
    exit;
}

// Tentar interpretar como XML
if (preg_match('/<\?xml/', $input)) {
    file_put_contents($logFile, date('Y-m-d H:i:s') . " - 📄 Conteúdo XML detectado\n", FILE_APPEND);
    
    // Tentar extrair dados do XML
    if (preg_match('/<ref>(.*?)<\/ref>/', $input, $matches)) {
        file_put_contents($logFile, date('Y-m-d H:i:s') . " - Ref encontrada no XML: " . $matches[1] . "\n", FILE_APPEND);
    }
    if (preg_match('/<status>(.*?)<\/status>/', $input, $matches)) {
        file_put_contents($logFile, date('Y-m-d H:i:s') . " - Status encontrado: " . $matches[1] . "\n", FILE_APPEND);
    }
    
    echo json_encode(['sucesso' => true, 'mensagem' => 'XML recebido com sucesso']);
    exit;
}

// Formato desconhecido
file_put_contents($logFile, date('Y-m-d H:i:s') . " - ⚠️ Formato desconhecido, mas webhook recebido\n", FILE_APPEND);
echo json_encode(['sucesso' => true, 'mensagem' => 'Webhook recebido com sucesso']);
?>