<?php
session_start();
require_once __DIR__ . '/config.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header("Location: checkout.php");
    exit();
}

if (empty($_SESSION['cart'])) {
    die("আপনার কার্ট খালি!");
}

// ইনপুট ডাটা নেওয়া ও ফিল্টার করা
$name = trim($_POST['name']);
$phone = trim($_POST['phone']);
$address = trim($_POST['address']);
$payment_method = trim($_POST['payment_method']);
$transaction_id = isset($_POST['transaction_id']) ? trim($_POST['transaction_id']) : null;

if (empty($name) || empty($phone) || empty($address) || empty($payment_method)) {
    die("সবগুলো তথ্য সঠিকভাবে পূরণ করুন!");
}

$delivery_charge = 80.00;
$total_amount = 0;

// মোট বিল হিসাব করা
foreach ($_SESSION['cart'] as $item) {
    $total_amount += $item['price'] * $item['qty'];
}
$grand_total = $total_amount + $delivery_charge;

// পেমেন্ট মেথড অনুযায়ী স্ট্যাটাস নির্ধারণ করা
$payment_status = 'Pending';
if ($payment_method === 'manual' && !empty($transaction_id)) {
    $payment_status = 'Pending-Verification'; // এডমিন প্যানেল ভেরিফাই করবে
}

try {
    $pdo->beginTransaction(); // ট্রানজেকশন শুরু

    // ১. অর্ডার টেবিলে মেইন ইনফরমেশন ইনসার্ট করা
    $order_stmt = $pdo->prepare("
        INSERT INTO orders (customer_name, customer_phone, shipping_address, total_amount, delivery_charge, grand_total, payment_method, payment_status, transaction_id, order_status)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'Pending')
    ");
    $order_stmt->execute([
        $name,
        $phone,
        $address,
        $total_amount,
        $delivery_charge,
        $grand_total,
        $payment_method,
        $payment_status,
        $transaction_id
    ]);

    $order_id = $pdo->lastInsertId(); // সদ্য তৈরি হওয়া অর্ডারের আইডি

    // ২. অর্ডার আইটেম টেবিলে প্রতিটি প্রোডাক্টের ডিটেইলস সেভ করা
    $item_stmt = $pdo->prepare("
        INSERT INTO order_items (order_id, product_id, product_name, size, color, price, qty, subtotal)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    ");

    // স্টকের পরিমাণ কমানোর জন্য কুয়েরি
    $stock_stmt = $pdo->prepare("UPDATE products SET stock_quantity = stock_quantity - ? WHERE id = ?");

    foreach ($_SESSION['cart'] as $item) {
        $subtotal = $item['price'] * $item['qty'];
        $item_stmt->execute([
            $order_id,
            $item['product_id'],
            $item['name'],
            $item['size'],
            $item['color'],
            $item['price'],
            $item['qty'],
            $subtotal
        ]);

        // প্রোডাক্টের স্টক কমিয়ে দেওয়া
        $stock_stmt->execute([$item['qty'], $item['product_id']]);
    }

    $pdo->commit(); // সবকিছু ঠিক থাকলে ডাটাবেজে পার্মানেন্ট সেভ করা

    // পেমেন্ট গেটওয়ে ট্রিগার (যদি SSLCommerz হয়)
    if ($payment_method === 'sslcommerz') {
        
        // ডাটাবেজের `payment_settings` টেবিল থেকে সেটিংস লোড করা
        $settings_stmt = $pdo->query("SELECT * FROM payment_settings LIMIT 1");
        $payment_settings = $settings_stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$payment_settings) {
            die("ত্রুটি: ডাটাবেজে কোনো পেমেন্ট সেটিংস পাওয়া যায়নি!");
        }

        $store_id = trim($payment_settings['ssl_store_id']);
        $store_passwd = trim($payment_settings['ssl_store_password']);
        
        // ডাটাবেজ কলাম ভ্যালু ঠিক আছে কি না তা ডায়নামিকালি নির্ধারণ করা
// ssl_status এর মান 'live' বা 'active' এবং স্টোর আইডি 'testbox' না হলেই কেবল লাইভ মোড চলবে, অন্যথায় সর্বদা স্যান্ডবক্স চালু থাকবে
$is_sandbox = (($ssl_status === 'live' || $ssl_status === 'active' || $ssl_status === '1') && $store_id !== 'testbox') ? false : true;

        if (empty($store_id) || empty($store_passwd)) {
            die("ত্রুটি: অ্যাডমিন প্যানেলে SSLCommerz Store ID অথবা Password সেট করা নেই!");
        }

        // SSLCommerz API ডাটা প্রস্তুতকরণ
        $post_data = array();
        $post_data['store_id'] = $store_id;
        $post_data['store_passwd'] = $store_passwd;
        $post_data['total_amount'] = $grand_total; // ডেলিভারি চার্জসহ মোট বিল
        $post_data['currency'] = "BDT";
        $post_data['tran_id'] = "TXN_" . $order_id . "_" . uniqid(); // ইউনিক ট্রানজেকশন আইডি
        
       // প্রোটোকল ডাইনামিকালি ডিটেক্ট করা (http বা https)
        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $base_url = $protocol . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);

        // রিটার্ন এবং আইপিএন ইউআরএল সেটিংস (আপনার অরিজিনাল success.php পেজে পাঠানো হচ্ছে)
        $post_data['success_url'] = $base_url . "/success.php?order_id=" . $order_id . "&status=success";
        $post_data['fail_url'] = $base_url . "/success.php?order_id=" . $order_id . "&status=fail";
        $post_data['cancel_url'] = $base_url . "/success.php?order_id=" . $order_id . "&status=cancel";

        // গ্রাহকের তথ্য
        $post_data['cus_name'] = $name;
        $post_data['cus_email'] = "customer@email.com"; // প্রজেক্টে ইমেল থাকলে এখানে দিতে পারেন
        $post_data['cus_phone'] = $phone;
        $post_data['cus_add1'] = $address;
        $post_data['cus_city'] = "Dhaka"; 
        $post_data['cus_country'] = "Bangladesh";

        // প্রোডাক্ট ও শিপিং সম্পর্কিত বাধ্যতামূলক ফিল্ড
        $post_data['shipping_method'] = "NO";
        $post_data['num_of_item'] = count($_SESSION['cart']);
        $post_data['product_name'] = "ShopVista Products";
        $post_data['product_category'] = "Ecommerce";
        $post_data['product_profile'] = "general";

        // গেটওয়ে ইউআরএল নির্ধারণ
        $direct_api_url = $is_sandbox 
            ? "https://sandbox.sslcommerz.com/gwprocess/v4/api.php" 
            : "https://securepay.sslcommerz.com/gwprocess/v4/api.php";

        // cURL রিকোয়েস্ট
        $handle = curl_init();
        curl_setopt($handle, CURLOPT_URL, $direct_api_url);
        curl_setopt($handle, CURLOPT_TIMEOUT, 30);
        curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($handle, CURLOPT_POST, 1);
        curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($post_data));
        curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); 

        $content = curl_exec($handle);
        $code = curl_getinfo($handle, CURLINFO_HTTP_CODE);

        if ($code == 200 && !(curl_errno($handle))) {
            curl_close($handle);
            $sslcommerzResponse = json_decode($content, true);

            if (isset($sslcommerzResponse['status']) && $sslcommerzResponse['status'] == 'SUCCESS') {
                // পেমেন্ট সফলভাবে গেটওয়েতে প্রসেস হলে কাস্টমার রিডাইরেক্ট হবে
                echo "<script>window.location.href = '" . $sslcommerzResponse['GatewayPageURL'] . "';</script>";
                exit();
            } else {
                die("SSLCommerz গেটওয়ে থেকে ত্রুটি এসেছে: " . htmlspecialchars($sslcommerzResponse['failedreason'] ?? 'Unknown Error'));
            }
        } else {
            curl_close($handle);
            die("SSLCommerz গেটওয়ের সাথে সার্ভার সংযোগ করতে পারছে না।");
        }

    } else {
        // ক্যাশ অন ডেলিভারি বা ম্যানুয়াল পেমেন্ট হলে কার্ট খালি করে সরাসরি সফল মেসেজ পেজে নিয়ে যাবে
        unset($_SESSION['cart']);
        header("Location: success.php?order_id=" . $order_id);
        exit();
    }

} catch (Exception $e) {
    $pdo->rollBack(); // কোনো এরর হলে পুরো অর্ডার প্রক্রিয়া বাতিল হয়ে যাবে
    die("দুঃখিত, অর্ডারটি সফল হয়নি! ভুল: " . $e->getMessage());
}
?>