<?php
require_once __DIR__ . '/config/config.php';
require_once __DIR__ . '/config/database.php';
require_once __DIR__ . '/config/functions.php';

// Shopier namespace'lerini dahil et
use Shopier\Shopier;

// Debug için log kaydı
error_log("Payment callback triggered. POST Data: " . json_encode($_POST));

global $db, $settings;

// Site ayarlarını yükle
$settings = [];
if ($db) {
    try {
        $stmt = $db->prepare("SELECT `key`, `value` FROM settings");
        $stmt->execute();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $settings[$row['key']] = $row['value'];
        }
    } catch (PDOException $e) {
        error_log("Settings load error: " . $e->getMessage());
    }
}

// Shopier API bilgileri
$shopier_api_key = $settings['shopier_api_key'] ?? null;
$shopier_api_secret = $settings['shopier_api_secret'] ?? null;

if (empty($_POST) || !$shopier_api_key || !$shopier_api_secret || !$db) {
    error_log("Payment callback error: missing parameters");
    // Anasayfaya yönlendir
    redirect('balance.php?payment_status=fail');
    exit;
}

try {
    // Yeni Shopier API kullanımı ile yanıt doğrulama
    $shopier = new Shopier($shopier_api_key, $shopier_api_secret);
    
    // Shopier'dan gelen verileri doğrula
    $is_valid = $shopier->validateResponse($_POST);
    
    if ($is_valid) {
        // Ödeme başarılı
        // POST verilerinden sipariş numarasını (BLNC_USER_ID_TIMESTAMP formatında) al
        $order_id = $_POST['platform_order_id'] ?? '';
        $status_code = $_POST['status'] ?? '';
        $payment_id = $_POST['payment_id'] ?? '';
        
        // Sipariş numarasından kullanıcı ID'sini çıkart
        if (preg_match('/^BLNC_(\d+)_\d+$/', $order_id, $matches)) {
            $user_id = $matches[1];
            
            // Ödeme durumunu güncelle
            try {
                $db->beginTransaction();
                
                // Ödeme kaydını güncelle
                $stmt = $db->prepare("UPDATE payments SET payment_id = ?, status = 'completed' WHERE payment_id = ? AND status = 'pending'");
                $stmt->execute([$payment_id, $order_id]);
                
                // Ödeme tutarını sorgula
                $stmt = $db->prepare("SELECT amount FROM payments WHERE payment_id = ? AND status = 'completed'");
                $stmt->execute([$order_id]);
                $payment = $stmt->fetch(PDO::FETCH_ASSOC);
                
                if ($payment) {
                    $amount = $payment['amount'];
                    
                    // Kullanıcı bakiyesini güncelle
                    $stmt = $db->prepare("UPDATE users SET balance = balance + ? WHERE id = ?");
                    $stmt->execute([$amount, $user_id]);
                    
                    $db->commit();
                    error_log("Payment completed successfully. User ID: $user_id, Amount: $amount, Order ID: $order_id");
                    
                    // Başarılı sayfasına yönlendir
                    redirect('balance.php?payment_status=success');
                    exit;
                } else {
                    // Ödeme kaydı bulunamadı
                    error_log("Payment record not found: $order_id");
                    $db->rollBack();
                }
            } catch (PDOException $e) {
                $db->rollBack();
                error_log("Payment update error: " . $e->getMessage());
            }
        } else {
            // Geçersiz sipariş ID formatı
            error_log("Invalid order ID format: $order_id");
        }
    } else {
        // Yanıt geçersiz
        error_log("Invalid Shopier response signature");
    }
} catch (Exception $e) {
    error_log("Payment callback exception: " . $e->getMessage());
}

// Hata durumunda başarısız sayfasına yönlendir
redirect('balance.php?payment_status=fail'); 