<?php
require 'db.php'; // Veritabanı bağlantı dosyanız

// Referans ağacından kullanıcıların ID'lerini ve seviyelerini al
function getReferralUsers($pdo, $userId, &$users = [], $level = 1, $currentLevel = 0) {
    if ($currentLevel > $level) {
        return;
    }

    $stmt = $pdo->prepare("SELECT id FROM users WHERE parent_reference_code = (SELECT reference_code FROM users WHERE id = ?)");
    $stmt->execute([$userId]);
    $referrals = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($referrals as $referral) {
        $users[] = ['id' => $referral['id'], 'level' => $currentLevel];
        getReferralUsers($pdo, $referral['id'], $users, $level, $currentLevel + 1);
    }
}

// Komisyon oranlarına göre toplam komisyon hesapla
function calculateTotalCommissions($pdo, $userId) {
    $commissionRates = [0 => 0.20, 1 => 0.10, 2 => 0.05, 3 => 0.025, 4 => 0.025];
    $totalCommission = 0;

    $users = [];
    getReferralUsers($pdo, $userId, $users, 4); // 4 seviye derinliğe kadar referansları al

    foreach ($users as $user) {
        $stmt = $pdo->prepare("SELECT SUM(sale_amount) AS sales FROM sales_reports WHERE user_id = ? AND is_approved = 1");
        $stmt->execute([$user['id']]);
        $sales = $stmt->fetch();

        if ($sales && $sales['sales']) {
            $totalCommission += $sales['sales'] * $commissionRates[$user['level']];
        }
    }

    return $totalCommission;
}

function getReferralTree($pdo, $parentReferenceCode = '', $level = 0) {
    $tree = [];
    // Eğer parentReferenceCode boşsa, kök kullanıcıyı yani oturum açan kullanıcıyı çekiyoruz.
    $query = $parentReferenceCode ? 
             "SELECT id, username, reference_code FROM users WHERE parent_reference_code = ?" :
             "SELECT id, username, reference_code FROM users WHERE id = ?"; // Oturum açan kullanıcı için
    
    $stmt = $pdo->prepare($query);
    $stmt->execute($parentReferenceCode ? [$parentReferenceCode] : [$_SESSION['user_id']]);
    $referrals = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($referrals as $referral) {
        $children = getReferralTree($pdo, $referral['reference_code'], $level + 1); // Alt referansları rekürsif olarak çek
        $tree[] = [
            'id' => $referral['id'],
            'username' => $referral['username'],
            'reference_code' => $referral['reference_code'],
            'level' => $level,
            'children' => $children
        ];
    }

    return $tree;
}


function getReferralCommissions($pdo, $userReferenceCode, $level = 1) {
    $commissionRates = [1 => 0.10, 2 => 0.05, 3 => 0.025]; // Düzeylere göre komisyon oranları
    $commissions = [];

    // Direkt referansların ID'lerini ve referans kodlarını çek
    $stmt = $pdo->prepare("SELECT id, reference_code FROM users WHERE parent_reference_code = ?");
    $stmt->execute([$userReferenceCode]);
    $referrals = $stmt->fetchAll();

    foreach ($referrals as $referral) {
        // Her bir referansın satışlarını çek
        $stmtSales = $pdo->prepare("SELECT id, sale_amount, created_at FROM sales_reports WHERE user_id = ? AND is_approved = 1");
        $stmtSales->execute([$referral['id']]);
        $sales = $stmtSales->fetchAll();

        foreach ($sales as $sale) {
            $commission = $sale['sale_amount'] * ($commissionRates[$level] ?? 0.025); // Varsayılan olarak en düşük oranı uygula
            $commissions[] = [
                'sale_id' => $sale['id'],
                'sale_amount' => $sale['sale_amount'],
                'commission_amount' => $commission,
                'sale_date' => $sale['created_at'],
                'referral_level' => $level,
                'referral_id' => $referral['id']
            ];
        }

        // Alt referansları da dolaş (Yinelemeli)
        if ($level < 3) {
            $commissions = array_merge($commissions, getReferralCommissions($pdo, $referral['reference_code'], $level + 1));
        }
    }

    return $commissions;
}