<?php
/**
 * وظائف خاصة بحساب المداخيل
 */

/**
 * حساب إجمالي المداخيل من الدفعات الشهرية لفترة معينة
 *
 * @param string $startDate تاريخ البداية
 * @param string $endDate تاريخ النهاية
 * @return float إجمالي المداخيل من الدفعات الشهرية
 */
function calculateMonthlyPaymentsIncome($startDate = null, $endDate = null) {
    $whereClause = '';
    $params = [];
    
    if ($startDate && $endDate) {
        $whereClause = "WHERE payment_status = 'paid' AND payment_date BETWEEN ? AND ?";
        $params = [$startDate, $endDate];
    } elseif ($startDate) {
        $whereClause = "WHERE payment_status = 'paid' AND payment_date >= ?";
        $params = [$startDate];
    } elseif ($endDate) {
        $whereClause = "WHERE payment_status = 'paid' AND payment_date <= ?";
        $params = [$endDate];
    } else {
        $whereClause = "WHERE payment_status = 'paid'";
    }
    
    $query = "SELECT SUM(amount_paid) as total FROM monthly_payments {$whereClause}";
    $result = fetchOne($query, $params);
    
    return $result ? (float)$result['total'] : 0;
}

/**
 * حساب إجمالي المداخيل من جدول المداخيل لفترة معينة
 *
 * @param string $startDate تاريخ البداية
 * @param string $endDate تاريخ النهاية
 * @return float إجمالي المداخيل من جدول المداخيل
 */
function calculateIncomeTableTotal($startDate = null, $endDate = null) {
    $params = [];
    $whereClause = '';
    
    if ($startDate && $endDate) {
        $whereClause = "WHERE payment_date BETWEEN ? AND ?";
        $params = [$startDate, $endDate];
    } elseif ($startDate) {
        $whereClause = "WHERE payment_date >= ?";
        $params = [$startDate];
    } elseif ($endDate) {
        $whereClause = "WHERE payment_date <= ?";
        $params = [$endDate];
    }
    
    $query = "SELECT SUM(amount) as total FROM income {$whereClause}";
    $result = fetchOne($query, $params);
    
    return $result ? (float)$result['total'] : 0;
}

/**
 * الحصول على تفاصيل المداخيل مصنفة حسب المصدر
 *
 * @param string $startDate تاريخ البداية
 * @param string $endDate تاريخ النهاية
 * @return array مصفوفة تحتوي على تفاصيل المداخيل حسب المصدر
 */
function getIncomeBySource($startDate = null, $endDate = null) {
    $result = [];
    
    // المداخيل من جدول المداخيل
    $incomeParams = [];
    $incomeWhereClause = '';
    
    if ($startDate && $endDate) {
        $incomeWhereClause = "WHERE payment_date BETWEEN ? AND ?";
        $incomeParams = [$startDate, $endDate];
    } elseif ($startDate) {
        $incomeWhereClause = "WHERE payment_date >= ?";
        $incomeParams = [$startDate];
    } elseif ($endDate) {
        $incomeWhereClause = "WHERE payment_date <= ?";
        $incomeParams = [$endDate];
    }
    
    $incomeQuery = "SELECT source, SUM(amount) as total FROM income {$incomeWhereClause} GROUP BY source";
    $incomeResult = fetchAll($incomeQuery, $incomeParams);
    
    foreach ($incomeResult as $row) {
        $result[$row['source']] = (float)$row['total'];
    }
    
    // المداخيل من الدفعات الشهرية
    $monthlyPaymentsTotal = calculateMonthlyPaymentsIncome($startDate, $endDate);
    if ($monthlyPaymentsTotal > 0) {
        $result['monthly_subscription'] = isset($result['monthly_subscription']) 
            ? $result['monthly_subscription'] + $monthlyPaymentsTotal 
            : $monthlyPaymentsTotal;
    }
    
    return $result;
}
?>
