<?php
require_once '../../config/db.php';
require_once '../../core/Auth.php';

header('Content-Type: application/json');

try {
    $user_id = Auth::check();
    $data = json_decode(file_get_contents("php://input"));

    if (!isset($data->transaction_id) || !isset($data->payment_intent)) {
        throw new Exception("Datos de verificación incompletos.");
    }

    $transaction_id = (int)$data->transaction_id;
    $payment_intent = $data->payment_intent; // Proveniente del SDK de Stripe/PayPal

    // 1. Verificar transacción en nuestra BD
    $stmt = $pdo->prepare("SELECT * FROM transactions WHERE id = ? AND user_id = ? AND status = 'pending'");
    $stmt->execute([$transaction_id, $user_id]);
    $transaction = $stmt->fetch();

    if (!$transaction) {
        throw new Exception("Transacción no encontrada o ya procesada.");
    }

    // 2. VERIFICACIÓN REAL CON GATEWAY (EJEMPLO STRIPE)
    // Aquí llamaríamos a \Stripe\PaymentIntent::retrieve($payment_intent)
    // Para esta fase, asumimos éxito si el frontend envía el intent correcto.
    $is_valid = true; 

    if ($is_valid) {
        $pdo->beginTransaction();

        // Actualizar estado de transacción
        $stmt_upd = $pdo->prepare("UPDATE transactions SET status = 'completed', reference_id = ? WHERE id = ?");
        $stmt_upd->execute([$payment_intent, $transaction_id]);

        // SUMAR DIAMANTES REALES AL USUARIO
        $stmt_add = $pdo->prepare("UPDATE i_users SET diamonds = diamonds + ? WHERE iuid = ?");
        $stmt_add->execute([$transaction['diamonds'], $user_id]);

        $pdo->commit();

        echo json_encode([
            'success' => true,
            'message' => '¡Pago verificado! Se han añadido ' . $transaction['diamonds'] . ' diamantes a tu cuenta.',
            'new_balance' => $pdo->query("SELECT diamonds FROM i_users WHERE iuid = $user_id")->fetchColumn()
        ]);
    } else {
        throw new Exception("El pago no ha sido verificado por el proveedor.");
    }

} catch (Exception $e) {
    if (isset($pdo) && $pdo->inTransaction()) $pdo->rollBack();
    http_response_code(400);
    echo json_encode(['error' => $e->getMessage()]);
}
?>
