<?php
// ১. সবার আগে আউটপুট বাফারিং শুরু করা (হেডার এরর বন্ধ করতে)
ob_start(); 
session_start();

// ২. এরর রিপোর্টিং অন (ডিবাগিং এর জন্য)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

/** * ফাইল পাথ কনফিগারেশন */
$db_file = __DIR__ . '/../includes/db.php'; 
$config_file = __DIR__ . '/../includes/lg_config.php';

if (!file_exists($db_file)) {
    ob_end_clean();
    die("Fatal Error: db.php missing at " . $db_file);
}

if (!file_exists($config_file)) {
    ob_end_clean();
    die("Fatal Error: lg_config.php missing at " . $config_file);
}

// ৩. ফাইল ইনক্লুড করা
require_once $db_file;
require_once $config_file;

// ৪. ফাংশন চেক
if (!function_exists('generate_lg_sign')) {
    ob_end_clean();
    die("Error: Function generate_lg_sign() is not defined in lg_config.php");
}

if (!isset($_SESSION['user_id'])) {
    ob_end_clean();
    die(json_encode(['status' => 0, 'msg' => 'Unauthorized access']));
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $uid = $_SESSION['user_id'];
    
    // --- ডুপ্লিকেট রিকোয়েস্ট চেক লজিক রিমুভ করা হয়েছে আপনার কথামতো ---
    // এখন ইউজার পেন্ডিং থাকা অবস্থায়ও নতুন রিকোয়েস্ট করতে পারবে।

    // ইনপুট ভ্যালিডেশন
    $amount = isset($_POST['amount']) ? floatval($_POST['amount']) : 0;
    $method = isset($_POST['method']) ? $_POST['method'] : ''; 
    $user_phone = isset($_POST['wallet_number']) ? $_POST['wallet_number'] : '';
    $promo_id = isset($_POST['promo_id']) ? intval($_POST['promo_id']) : 0; 

    if ($amount < 100 || $amount > 30000) {
        ob_end_clean();
        die(json_encode(['status' => 0, 'msg' => 'Minimum 100 and Maximum 30000 BDT']));
    }

    if (empty($method) || empty($user_phone)) {
        ob_end_clean();
        die("Error: Payment method or Wallet number is missing.");
    }

    $order_sn = 'ORD' . time() . rand(100, 999);

    // ৫. ডাটাবেসে ট্রানজেকশন রেকর্ড
    $sql = "INSERT INTO transactions_fake (user_id, type, amount, method, promo_id, status, wallet_number, order_sn, created_at) 
            VALUES ($uid, 'deposit', $amount, '$method', $promo_id, 'pending', '$user_phone', '$order_sn', NOW())";
    
    if ($conn->query($sql)) {
        
        // --- পেমেন্ট ট্রাক করার জন্য সেশনে সেভ ---
        $_SESSION['last_order_sn'] = $order_sn;

        // ৬. LG-Pay এর জন্য প্যারামিটার তৈরি
        $params = [
            "app_id"     => LG_APP_ID,
            "trade_type" => $method, 
            "order_sn"   => $order_sn,
            "user_id"    => $user_phone,
            "money"      => intval($amount * 100),
            "notify_url" => LG_NOTIFY_URL,
            "return_url"   => LG_RETURN_URL, 
            "redirect_url" => LG_RETURN_URL,
            "callback_url" => LG_RETURN_URL,
            "ip"         => $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0'
        ];

        $params['sign'] = generate_lg_sign($params, LG_KEY);

        // ৭. CURL রিকোয়েস্ট
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, LG_GATEWAY_URL);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        
        $response = curl_exec($ch);
        
        if (curl_errno($ch)) {
            $error_msg = curl_error($ch);
            curl_close($ch);
            ob_end_clean();
            die('Curl Error: ' . $error_msg);
        }
        curl_close($ch);

        $res_data = json_decode($response, true);

        // ৮. গেটওয়ে রেসপন্স চেক ও রিডাইরেক্ট
        if (isset($res_data['status']) && $res_data['status'] == 1) {
            ob_end_clean(); 
            header("Location: " . $res_data['data']['pay_url']);
            exit();
        } else {
            ob_end_flush();
            echo "<h3>Gateway Error</h3>";
            echo "Message: " . ($res_data['msg'] ?? 'Unknown Error');
        }

    } else {
        ob_end_clean();
        die("Database Error: " . $conn->error);
    }
} else {
    ob_end_flush();
    echo "Direct access not allowed.";
}
?>