<?php
// ==============================================================================
// WEBHOOK WITETEC - ATUALIZAÇÃO AUTOMÁTICA
// ==============================================================================

// 1. Configurações Iniciais
header("Content-Type: application/json");
ini_set('display_errors', 0); // Não mostrar erros na tela (é um robô)
error_reporting(E_ALL);

// Função de Log para Debug
function logWebhook($msg) {
    file_put_contents('webhook_log.txt', date('d/m/Y H:i:s') . " - " . print_r($msg, true) . PHP_EOL, FILE_APPEND);
}

// 2. Conexão com Banco
$paths = ['../../config.php', '../config.php', 'config.php'];
$config_loaded = false;
foreach ($paths as $path) { if (file_exists($path)) { require_once $path; $config_loaded = true; break; }}

if (!$config_loaded) { 
    logWebhook("ERRO CRÍTICO: config.php não encontrado.");
    http_response_code(500); exit; 
}

// 3. Recebe os dados da WiteTec
$json = file_get_contents("php://input");
$dados = json_decode($json, true);

// Se não vier dados, para.
if (empty($dados)) { exit; }

logWebhook("Notificação recebida: " . $json);

// 4. Processa o Status
// A WiteTec geralmente manda: id (da transação), status (PAID, COMPLETED, etc), e metadata
$transaction_id = $dados['id'] ?? $dados['data']['id'] ?? null;
$status_api = strtoupper($dados['status'] ?? $dados['data']['status'] ?? '');

// Mapeia status da API para o nosso Banco
$novo_status = '';
if (in_array($status_api, ['PAID', 'COMPLETED', 'SUCCEEDED', 'SETTLED'])) {
    $novo_status = 'aprovado';
} elseif (in_array($status_api, ['REFUNDED', 'CHARGED_BACK'])) {
    $novo_status = 'reembolsado';
} elseif (in_array($status_api, ['CANCELED', 'FAILED'])) {
    $novo_status = 'cancelado';
}

if (empty($transaction_id) || empty($novo_status)) {
    logWebhook("Dados insuficientes ou status ignorado: $status_api");
    http_response_code(200); exit;
}

try {
    // 5. Atualiza o Pedido
    // Buscamos pelo transaction_id salvo no banco
    $stmt = $pdo->prepare("SELECT * FROM pedidos WHERE transaction_id = ?");
    $stmt->execute([$transaction_id]);
    $pedido = $stmt->fetch();

    if (!$pedido) {
        // Tenta buscar pelo ID externo (sellerExternalRef) se transaction_id falhar
        $ref = $dados['metadata']['sellerExternalRef'] ?? 0;
        $stmt = $pdo->prepare("SELECT * FROM pedidos WHERE id = ?");
        $stmt->execute([$ref]);
        $pedido = $stmt->fetch();
    }

    if ($pedido) {
        // Atualiza status no banco
        $pdo->prepare("UPDATE pedidos SET status = ? WHERE id = ?")->execute([$novo_status, $pedido['id']]);
        logWebhook("Pedido #{$pedido['id']} atualizado para: $novo_status");

        // 6. LIBERAÇÃO DE ACESSO (Se aprovado)
        if ($novo_status == 'aprovado') {
            
            // Busca o curso vinculado ao produto
            $stmt_prod = $pdo->prepare("SELECT id FROM cursos WHERE produto_id = ?");
            $stmt_prod->execute([$pedido['produto_id']]);
            $curso = $stmt_prod->fetch();

            if ($curso) {
                // Insere matrícula (IGNORE para não duplicar)
                $pdo->prepare("INSERT IGNORE INTO matriculas (usuario_id, curso_id, ativo) VALUES (?, ?, 1)")
                    ->execute([$pedido['usuario_id'], $curso['id']]);
                logWebhook("Acesso liberado ao Curso ID {$curso['id']} para Usuario ID {$pedido['usuario_id']}");
            }

            // 7. ENVIO DE E-MAIL (Se ainda não foi enviado)
            if ($pedido['email_enviado'] == 0) {
                // Tenta incluir o script de envio se existir
                if (file_exists('enviar_email_acesso.php')) {
                    require_once 'enviar_email_acesso.php';
                    
                    // Busca dados do usuário
                    $u = $pdo->prepare("SELECT nome, email FROM usuarios WHERE id = ?");
                    $u->execute([$pedido['usuario_id']]);
                    $usuario = $u->fetch();
                    
                    if ($usuario) {
                        enviarAcessoAluno($usuario['email'], explode(' ', $usuario['nome'])[0]);
                        $pdo->prepare("UPDATE pedidos SET email_enviado = 1 WHERE id = ?")->execute([$pedido['id']]);
                        logWebhook("E-mail de acesso enviado para: " . $usuario['email']);
                    }
                }
            }
        }
    } else {
        logWebhook("Pedido não encontrado para a transação: $transaction_id");
    }

    http_response_code(200); // Confirma recebimento para a WiteTec

} catch (Exception $e) {
    logWebhook("ERRO PHP: " . $e->getMessage());
    http_response_code(500);
}
?>