<?php
session_start();
error_reporting(0);
ini_set('display_errors', 0);
header('Content-Type: application/json');

require_once 'config.php';
$pdo = getConexaoAtiva();
$pdo->exec("SET NAMES utf8mb4");

// Valida Sessão
if (!isset($_SESSION['user_id'])) {
    echo json_encode(['sucesso' => false, 'erro' => 'Sessão expirada. Faça login novamente.']);
    exit;
}

$id_usuario = (int)$_SESSION['user_id'];
$plano_id = isset($_POST['plano_id']) ? (int)$_POST['plano_id'] : 0;
$gateway = isset($_POST['gateway']) ? $_POST['gateway'] : '';

if ($plano_id <= 0 || empty($gateway)) {
    echo json_encode(['sucesso' => false, 'erro' => 'Parâmetros inválidos ou plano não selecionado.']);
    exit;
}

// ========================================================================
// --- FUNÇÃO PARA GERAR CPF VÁLIDO (MATEMATICAMENTE) ---
// ========================================================================
function gerarCpfMatematico() {
    $n = [];
    for ($i = 0; $i < 9; $i++) { $n[$i] = rand(0, 9); }
    $soma = 0;
    for ($i = 0; $i < 9; $i++) { $soma += $n[$i] * (10 - $i); }
    $resto = $soma % 11;
    $n[9] = ($resto < 2) ? 0 : 11 - $resto;
    $soma = 0;
    for ($i = 0; $i < 10; $i++) { $soma += $n[$i] * (11 - $i); }
    $resto = $soma % 11;
    $n[10] = ($resto < 2) ? 0 : 11 - $resto;
    return implode('', $n);
}

// ========================================================================
// --- AUTO-CRIAÇÃO DA TABELA DE FATURAS ---
// ========================================================================
try {
    $pdo->exec("CREATE TABLE IF NOT EXISTS `faturas_loja` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `user_id` int(11) NOT NULL,
        `plano_id` int(11) NOT NULL,
        `gateway` varchar(50) NOT NULL,
        `transacao_id` varchar(255) NOT NULL,
        `valor` decimal(10,2) NOT NULL,
        `status` varchar(50) DEFAULT 'pendente',
        `data_criacao` datetime DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
} catch (Exception $e) {}

// Busca os dados do Plano
$stmtPlano = $pdo->prepare("SELECT * FROM planos_creditos WHERE id = ?");
$stmtPlano->execute([$plano_id]);
$plano = $stmtPlano->fetch(PDO::FETCH_ASSOC);

if (!$plano) {
    echo json_encode(['sucesso' => false, 'erro' => 'Plano não encontrado no banco de dados.']);
    exit;
}

$valor = number_format($plano['valor'], 2, '.', '');
$titulo = "Compra de " . $plano['qtd_creditos'] . " Creditos";

// Busca os Tokens de Pagamento
$config_pag = $pdo->query("SELECT * FROM config_pagamentos LIMIT 1")->fetch(PDO::FETCH_ASSOC);

if (!$config_pag) {
    echo json_encode(['sucesso' => false, 'erro' => 'Gateways de pagamento não configurados pelo administrador.']);
    exit;
}

// ========================================================================
// --- MOTOR MERCADO PAGO ---
// ========================================================================
if ($gateway === 'mp') {
    $mp_token = trim($config_pag['mp_token']);
    if(empty($mp_token)) {
        echo json_encode(['sucesso' => false, 'erro' => 'Token do Mercado Pago não foi configurado.']);
        exit;
    }

    $email_pagador = "pagador_iptv_" . $id_usuario . "@paineliptv.com";

    $curl = curl_init();
    $payload = json_encode([
        "transaction_amount" => (float)$valor,
        "description" => $titulo,
        "payment_method_id" => "pix",
        "payer" => [
            "email" => $email_pagador
        ]
    ]);

    curl_setopt_array($curl, [
        CURLOPT_URL => "https://api.mercadopago.com/v1/payments",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $payload,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer " . $mp_token,
            "Content-Type: application/json"
        ],
    ]);

    $response = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);

    if ($err) {
        echo json_encode(['sucesso' => false, 'erro' => 'Falha na comunicação com o Mercado Pago.']);
        exit;
    }

    $res = json_decode($response, true);

    if (isset($res['id']) && isset($res['point_of_interaction'])) {
        $transacao_id = $res['id'];
        $qr_code = $res['point_of_interaction']['transaction_data']['qr_code'];
        $qr_code_base64 = $res['point_of_interaction']['transaction_data']['qr_code_base64'];

        $pdo->prepare("INSERT INTO faturas_loja (user_id, plano_id, gateway, transacao_id, valor) VALUES (?, ?, ?, ?, ?)")->execute([$id_usuario, $plano_id, 'mp', $transacao_id, $valor]);

        echo json_encode(['sucesso' => true, 'qr_code' => $qr_code, 'qr_code_base64' => $qr_code_base64, 'transacao_id' => $transacao_id]);
        exit;
    } else {
        $erroMsg = isset($res['message']) ? $res['message'] : 'Erro desconhecido.';
        echo json_encode(['sucesso' => false, 'erro' => 'Mercado Pago recusou: ' . $erroMsg]);
        exit;
    }
}

// ========================================================================
// --- MOTOR ASAAS ---
// ========================================================================
elseif ($gateway === 'asaas') {
    $asaas_token = trim($config_pag['asaas_token']);
    if(empty($asaas_token)) {
        echo json_encode(['sucesso' => false, 'erro' => 'Token do Asaas não configurado.']);
        exit;
    }

    function asaasRequest($endpoint, $method, $postData, $token) {
        $curl = curl_init();
        curl_setopt_array($curl, [
            CURLOPT_URL => "https://api.asaas.com/v3/" . $endpoint,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST => $method,
            CURLOPT_POSTFIELDS => $postData ? json_encode($postData) : null,
            CURLOPT_HTTPHEADER => ["access_token: " . $token, "Content-Type: application/json"],
        ]);
        $response = curl_exec($curl);
        curl_close($curl);
        return json_decode($response, true);
    }

    // MUDANÇA AQUI: E-mail novo para forçar o Asaas a criar um cliente do zero (COM o CPF gerado)
    $email_cliente = "pagador_iptv_" . $id_usuario . "@topiptv.com";
    $nome_cliente = "Revendedor Painel ID " . $id_usuario;
    
    $busca_cliente = asaasRequest("customers?email=" . urlencode($email_cliente), "GET", null, $asaas_token);
    
    $customer_id = null;
    if (isset($busca_cliente['data']) && count($busca_cliente['data']) > 0) {
        $customer_id = $busca_cliente['data'][0]['id'];
    } else {
        // Cria o cliente com o CPF Falso novo em folha
        $cpf_gerado = gerarCpfMatematico();
        $cria_cliente = asaasRequest("customers", "POST", [
            "name" => $nome_cliente,
            "email" => $email_cliente,
            "cpfCnpj" => $cpf_gerado
        ], $asaas_token);

        if (isset($cria_cliente['id'])) {
            $customer_id = $cria_cliente['id'];
        } else {
            $erroAsaas = isset($cria_cliente['errors'][0]['description']) ? $cria_cliente['errors'][0]['description'] : 'Falha ao cadastrar cliente.';
            echo json_encode(['sucesso' => false, 'erro' => 'Asaas recusou o cliente: ' . $erroAsaas]);
            exit;
        }
    }

    // Criar a Cobrança
    $vencimento = date('Y-m-d', strtotime('+1 day'));
    $cobranca = asaasRequest("payments", "POST", [
        "customer" => $customer_id,
        "billingType" => "PIX",
        "value" => (float)$valor,
        "dueDate" => $vencimento,
        "description" => $titulo
    ], $asaas_token);

    if (!isset($cobranca['id'])) {
        $erroAsaas = isset($cobranca['errors'][0]['description']) ? $cobranca['errors'][0]['description'] : 'Falha ao gerar cobrança.';
        echo json_encode(['sucesso' => false, 'erro' => 'Asaas recusou o PIX: ' . $erroAsaas]);
        exit;
    }

    $transacao_id = $cobranca['id'];

    // Pegar Imagem do QR Code
    $qr_request = asaasRequest("payments/" . $transacao_id . "/pixQrCode", "GET", null, $asaas_token);

    if (!isset($qr_request['payload'])) {
        echo json_encode(['sucesso' => false, 'erro' => 'Asaas criou a cobrança, mas sem QR Code.']);
        exit;
    }

    // Registra a Fatura
    $pdo->prepare("INSERT INTO faturas_loja (user_id, plano_id, gateway, transacao_id, valor) VALUES (?, ?, ?, ?, ?)")->execute([$id_usuario, $plano_id, 'asaas', $transacao_id, $valor]);

    echo json_encode([
        'sucesso' => true,
        'qr_code' => $qr_request['payload'],
        'qr_code_base64' => $qr_request['encodedImage'],
        'transacao_id' => $transacao_id
    ]);
    exit;
} else {
    echo json_encode(['sucesso' => false, 'erro' => 'Gateway inválido.']);
    exit;
}
?>
