<?php
session_start();
require_once 'includes/db.php';
require_once 'includes/functions.php';
require_once 'includes/QNBPay.php'; // QNBPay sınıfını dahil ediyoruz

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    die("Geçersiz istek.");
}

$cart_token = isset($_COOKIE['cart_token']) ? $_COOKIE['cart_token'] : '';
if (!$cart_token) {
    die("Sepetiniz bulunamadı veya oturumunuz zaman aşımına uğradı.");
}

// --------------------------------------------------------
// 1. SEPETİ VE TUTARLARI GÜVENLİ HESAPLA (Sepet ve Kargo Zekası)
// (siparis-tamamla.php'deki ile tamamen aynı mantıkta hesaplıyoruz)
// --------------------------------------------------------
$cart_stmt = $db->prepare("SELECT c.id as cart_id, c.coupon_code FROM carts c WHERE c.session_token = ?");
$cart_stmt->execute([$cart_token]);
$cart_data = $cart_stmt->fetch();
$cart_id = $cart_data['cart_id'];
$coupon_code = $cart_data['coupon_code'];

$kargo_ayarlari = $db->query("SELECT * FROM shipping_settings WHERE id = 1")->fetch(PDO::FETCH_ASSOC);
$kargo_sabit_ucret = (float)$kargo_ayarlari['fixed_fee'];
$kargo_tutar_baraji = (float)$kargo_ayarlari['free_amount_limit'];
$kargo_tutar_aktif = (bool)$kargo_ayarlari['free_amount_status'];
$kargo_adet_baraji = (int)$kargo_ayarlari['free_quantity_limit'];
$kargo_adet_aktif = (bool)$kargo_ayarlari['free_quantity_status'];
$kargo_hedef_kategoriler = $kargo_ayarlari['target_categories'] ? explode(',', $kargo_ayarlari['target_categories']) : [];

$items_stmt = $db->prepare("
    SELECT ci.quantity, p.id as product_id, p.price, p.discount_price, p.type, p.is_free_shipping, p.category_id 
    FROM cart_items ci JOIN products p ON ci.product_id = p.id WHERE ci.cart_id = ?
");
$items_stmt->execute([$cart_id]);
$sepet_urunleri = $items_stmt->fetchAll();

$ara_toplam = 0;
$indirim = 0;
$fiziksel_urun_var_mi = false;
$vip_kargo_var_mi = false; 
$adet_kampanyasina_dahil_urun_sayisi = 0; 

foreach ($sepet_urunleri as $urun) {
    $fiyat = ($urun['discount_price'] > 0) ? $urun['discount_price'] : $urun['price'];
    $ara_toplam += ($fiyat * $urun['quantity']);
    
    if (in_array($urun['type'], ['physical', 'subscription', 'exam_package', 'single_exam'])) {
        $fiziksel_urun_var_mi = true;
    }
    if ($urun['is_free_shipping'] == 1) {
        $vip_kargo_var_mi = true;
    }
    if (in_array($urun['category_id'], $kargo_hedef_kategoriler)) {
        $adet_kampanyasina_dahil_urun_sayisi += $urun['quantity'];
    }
}

if ($coupon_code) {
    $cpn = $db->prepare("SELECT * FROM coupons WHERE code = ? AND status = 1");
    $cpn->execute([$coupon_code]);
    $k = $cpn->fetch();
    if ($k && ($k['min_cart_amount'] == 0 || $ara_toplam >= $k['min_cart_amount'])) {
        $indirim = ($k['discount_type'] == 'percentage') ? ($ara_toplam * $k['discount_value'] / 100) : $k['discount_value'];
        if ($indirim > $ara_toplam) $indirim = $ara_toplam;
    }
}

$kargo = 0;
$odenecek_ara_toplam = $ara_toplam - $indirim;

if ($fiziksel_urun_var_mi) {
    if ($vip_kargo_var_mi) {
        $kargo = 0;
    } elseif ($kargo_tutar_aktif && $odenecek_ara_toplam >= $kargo_tutar_baraji) {
        $kargo = 0;
    } elseif ($kargo_adet_aktif && $adet_kampanyasina_dahil_urun_sayisi >= $kargo_adet_baraji) {
        $kargo = 0;
    } else {
        $kargo = $kargo_sabit_ucret;
    }
}

$genel_toplam = $odenecek_ara_toplam + $kargo;

// --------------------------------------------------------
// 2. QNBPAY 3D SECURE HAZIRLIKLARI
// --------------------------------------------------------

// Müşterinin formdaki tüm bilgilerini onay dönüşünde kullanmak üzere Session'a alıyoruz
$_SESSION['pending_order_post'] = $_POST;
$_SESSION['pending_order_amount'] = $genel_toplam;

// QNB API Bilgileri (Test ortamı bilgileri - Canlıya geçince güncellenecek)
$app_id = '25c111670437d5d1a51328f6becbac3a';
$app_secret = 'e21d68775e3ca49bf6b9947d4ab2d705';
$merchant_key = '$2y$10$RV0jSGZydTCRYi6PJGppGuIc2IirixDFgkWTa63sglfEibQjgJDQC';
$is_test = false; // Artık canlıda! // Canlıya geçince false yapılacak

$qnbPay = new QNBPay($app_id, $app_secret, $merchant_key, '18330', $is_test);


$invoiceId = $_POST['order_number']; // Sipariş numarası (Örn: SK-260410-ABCD)
$totalAmount = number_format($genel_toplam, 2, '.', '');
$installments = isset($_POST['installments']) ? $_POST['installments'] : '1';

// Dönüş yapılacak Callback URL'ini dinamik oluşturuyoruz
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http";
$base_url = $protocol . "://" . $_SERVER['HTTP_HOST'] . "/magaza/";
$return_url = $base_url . "odeme-sonuc.php";

$paymentData = [
    'cc_holder_name' => $_POST['cc_holder_name'],
    'cc_no' => str_replace(' ', '', $_POST['cc_no']),
    'expiry_month' => $_POST['expiry_month'],
    'expiry_year' => $_POST['expiry_year'],
    'cvv' => $_POST['cvv'],
    'currency_code' => 'TRY',
    'installments_number' => $installments,
    'invoice_id' => $invoiceId,
    'invoice_description' => 'SınavKocu Siparişi',
    'total' => $totalAmount,
    'items' => [
        [
            'name' => 'SınavKocu Sepet Tutarı',
            'price' => $totalAmount,
            'quantity' => 1,
            'description' => 'Sipariş No: ' . $invoiceId
        ]
    ],
    'is_comission_from_user' => 0,
    'transaction_type' => 'Auth',
    'payment_completed_by' => 'app',
    'return_url' => $return_url, // Başarılıysa gidecek URL
    'cancel_url' => $return_url, // Başarısızsa gidecek URL
    'merchant_key' => $merchant_key,
    'hash_key' => $qnbPay->generateHashKey($totalAmount, $installments, 'TRY', $merchant_key, $invoiceId, $app_secret)
];

try {
    // QNBPay::pay3D metodu API'ye POST atar ve dönen HTML formunu "echo" edip "die" ile sayfayı bitirir. 
    // Yani müşteri otomatik olarak bankanın SMS onay sayfasına yönlendirilir.
    $qnbPay->pay3D($paymentData);
    
} catch (Exception $e) {
    die("3D Secure başlatılırken bir hata oluştu: " . $e->getMessage());
}
?>