<?php
require '../config.php';

/* =========================
   LOG RAW
========================= */
$raw = file_get_contents("php://input");
file_put_contents(
    __DIR__ . '/../logs/webhook_connectpay.log',
    date('Y-m-d H:i:s') . " RAW: " . $raw . PHP_EOL,
    FILE_APPEND
);

$body = json_decode($raw, true);

// valida payload
if (!$body || empty($body['status']) || empty($body['id'])) {
    http_response_code(200);
    exit;
}

// STATUS QUE VALE PAGAMENTO
if (!in_array($body['status'], ['AUTHORIZED', 'PAID'])) {
    file_put_contents(
        __DIR__ . '/../logs/webhook_connectpay_status.log',
        date('Y-m-d H:i:s') . " STATUS IGNORADO: {$body['status']}\n",
        FILE_APPEND
    );
    http_response_code(200);
    exit;
}

$transactionId = $body['id'];

// busca depósito pendente
$stmt = $conn->prepare("
    SELECT * FROM deposits 
    WHERE transaction_id=? AND status='PENDING'
");
$stmt->execute([$transactionId]);
$dep = $stmt->fetch();

if (!$dep) {
    file_put_contents(
        __DIR__ . '/../logs/webhook_connectpay_status.log',
        date('Y-m-d H:i:s') . " DEPÓSITO NÃO ENCONTRADO OU JÁ PROCESSADO\n",
        FILE_APPEND
    );
    http_response_code(200);
    exit;
}

/* =========================
   FUNÇÃO DE COMISSÃO
========================= */
function pagarComissao($conn, $userId, $valor) {

    // nível 1
    $nivel1 = $conn->query("
        SELECT indicado_por FROM users WHERE id = $userId
    ")->fetchColumn();

    if ($nivel1) {
        $com1 = $valor * 0.10;
        $conn->query("
            UPDATE users SET saldo = saldo + $com1 WHERE id = $nivel1
        ");
    }

    // nível 2
    if ($nivel1) {
        $nivel2 = $conn->query("
            SELECT indicado_por FROM users WHERE id = $nivel1
        ")->fetchColumn();

        if ($nivel2) {
            $com2 = $valor * 0.03;
            $conn->query("
                UPDATE users SET saldo = saldo + $com2 WHERE id = $nivel2
            ");
        }
    }

    // nível 3
    if (!empty($nivel2)) {
        $nivel3 = $conn->query("
            SELECT indicado_por FROM users WHERE id = $nivel2
        ")->fetchColumn();

        if ($nivel3) {
            $com3 = $valor * 0.01;
            $conn->query("
                UPDATE users SET saldo = saldo + $com3 WHERE id = $nivel3
            ");
        }
    }

    // log
    file_put_contents(
        __DIR__ . '/../logs/webhook_connectpay_comissao.log',
        date('Y-m-d H:i:s') .
        " COMISSÃO | USER $userId | VALOR $valor | N1=$nivel1 | N2=" .
        ($nivel2 ?? 'null') . " | N3=" . ($nivel3 ?? 'null') . "\n",
        FILE_APPEND
    );
}

/* =========================
   PROCESSA PAGAMENTO
========================= */
$conn->beginTransaction();

// marca depósito como pago
$conn->prepare("
    UPDATE deposits 
    SET status='PAID', paid_at=NOW()
    WHERE id=?
")->execute([$dep['id']]);

// credita saldo do usuário
$conn->prepare("
    UPDATE users 
    SET saldo = saldo + ?
    WHERE id=?
")->execute([$dep['amount'], $dep['user_id']]);

// paga comissões
pagarComissao($conn, $dep['user_id'], $dep['amount']);

$conn->commit();

/* =========================
   LOG FINAL
========================= */
file_put_contents(
    __DIR__ . '/../logs/webhook_connectpay_status.log',
    date('Y-m-d H:i:s') .
    " DEPÓSITO CREDITADO | USER {$dep['user_id']} | R$ {$dep['amount']}\n",
    FILE_APPEND
);

http_response_code(200);
