<?php
// includes/jalali.php - کتابخانه تبدیل تاریخ (نسخه مستقل)

/**
 * تبدیل تاریخ میلادی به شمسی
 * 
 * @param string $date تاریخ میلادی (Y-m-d یا Y-m-d H:i:s)
 * @param string $format فرمت خروجی
 * @return string تاریخ شمسی
 */
function jalaliDate($date, $format = 'Y/m/d') {
    if (empty($date) || $date == '0000-00-00' || $date == '0000-00-00 00:00:00') {
        return '-';
    }
    
    // حذف زمان
    $dateParts = explode(' ', trim($date));
    $dateStr = $dateParts[0];
    
    // تجزیه تاریخ میلادی
    $parts = explode('-', $dateStr);
    if (count($parts) != 3) {
        return $dateStr;
    }
    
    $gy = (int)$parts[0];
    $gm = (int)$parts[1];
    $gd = (int)$parts[2];
    
    if ($gy < 1900 || $gy > 2100 || $gm < 1 || $gm > 12 || $gd < 1 || $gd > 31) {
        return $dateStr;
    }
    
    // ===== تبدیل میلادی به شمسی (الگوریتم اصلاح شده) =====
    $g_d_m = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
    $j_d_m = [0, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30];
    
    $gy2 = ($gm > 2) ? ($gy + 1) : $gy;
    
    // ===== محاسبه تعداد روز از مبدا =====
    $days = 0;
    
    // سال‌های کامل از 1 فروردین 1300 (22 مارس 1921)
    for ($y = 1921; $y < $gy; $y++) {
        $days += 365;
        if (($y % 4 == 0 && $y % 100 != 0) || ($y % 400 == 0)) {
            $days++;
        }
    }
    
    // اضافه کردن روزهای سال جاری تا تاریخ مورد نظر
    $days += $gd + $g_d_m[$gm - 1] - 1;
    
    // ===== تبدیل روز به شمسی =====
    // 1 فروردین 1300 = روز 0
    // هر 4 سال شمسی = 1461 روز (365*4 + 1)
    $jz = (int)($days / 1461);
    $days %= 1461;
    
    $jy = 1300 + ($jz * 4);
    
    // محاسبه سال
    for ($i = 0; $i < 4; $i++) {
        $yearDays = 365;
        if ($i == 0) $yearDays = 366; // سال کبیسه شمسی
        if ($days < $yearDays) break;
        $days -= $yearDays;
        $jy++;
    }
    
    // محاسبه ماه و روز
    $jm = 1;
    for ($i = 0; $i < 12; $i++) {
        $monthDays = $j_d_m[$i];
        if ($i == 11 && ($jy % 4 == 0)) {
            $monthDays = 30; // اسفند سال کبیسه 30 روز
        }
        if ($days < $monthDays) break;
        $days -= $monthDays;
        $jm++;
    }
    $jd = $days + 1;
    
    // ===== ساخت خروجی =====
    $output = '';
    for ($i = 0; $i < strlen($format); $i++) {
        $char = $format[$i];
        if ($char == 'Y') $output .= $jy;
        elseif ($char == 'y') $output .= substr($jy, -2);
        elseif ($char == 'm') $output .= str_pad($jm, 2, '0', STR_PAD_LEFT);
        elseif ($char == 'n') $output .= $jm;
        elseif ($char == 'd') $output .= str_pad($jd, 2, '0', STR_PAD_LEFT);
        elseif ($char == 'j') $output .= $jd;
        else $output .= $char;
    }
    return $output;
}
?>