<?php
// تفعيل عرض الأخطاء لغرض التطوير
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$pageTitle = 'إدارة سياسة أسعار الإجازات والدوام'; // تم تحديث العنوان

// مسار ملف التكوين (يجب أن يكون صحيحاً)
$configFilePath = '../../includes/vacation_config.php'; 

// تضمين الملفات الأساسية
include '../../includes/header.php'; 

checkLogin();

// الصلاحية المطلوبة
if (!hasPermission('manage_settings')) {
    $_SESSION['error_message'] = 'ليس لديك صلاحية لإدارة إعدادات سياسة الدوام.';
    header('Location: index.php');
    exit();
}

$successMessage = $_SESSION['success_message'] ?? '';
unset($_SESSION['success_message']);

$errorMessage = $_SESSION['error_message'] ?? '';
unset($_SESSION['error_message']);

// =========================================================================
// وظائف المساعدة
// =========================================================================

/**
 * جلب الأسعار والإعدادات الحالية من ملف التكوين.
 * **(تم التعديل لإضافة مفتاح WEEKEND_DAYS_ISO)**
 * @param string $path مسار ملف التكوين.
 * @return array الأسعار المحفوظة أو قيم افتراضية كاملة.
 */
function loadVacationRates($path) {
    // القيم الافتراضية الكاملة تشمل سياسة العطلة الأسبوعية (5=الجمعة, 6=السبت)
    $defaults = [
        'سنوية' => 1.00, 'Annual' => 1.00, 
        'مرضية' => 0.75, 'Sick' => 0.75,
        'طارئة' => 1.00,
        'إجازة_زواج' => 1.00, 'إجازة_وفاة' => 1.00,
        'مكلف_بمهمة' => 1.00,
        'واجب' => 1.00,
        'واجب_وقتي' => 1.00,
        'زمنية' => 0.50, // جزئياً
        'ايفاد' => 1.00,
        'تفرغ' => 1.00,
        'استراحة' => 1.00,
        'دوام_في_عطلة' => 1.00,
        'بدون_راتب' => 0.00, 
        'غياب' => 0.00, 
        'أخرى' => 0.00,
        // **الإضافة الجديدة:** مفتاح أيام العطلة الأسبوعية
        'WEEKEND_DAYS_ISO' => [5, 6], 
    ];

    if (file_exists($path)) {
        $loadedRates = require $path;
        // ندمج المحمّل مع الافتراضيات لضمان وجود WEEKEND_DAYS_ISO
        return array_merge($defaults, $loadedRates);
    }
    
    return $defaults;
}

/**
 * حفظ الأسعار والإعدادات الجديدة في ملف التكوين.
 * **(تم التعديل لحفظ مصفوفة WEEKEND_DAYS_ISO بشكل صحيح)**
 * @param string $path مسار ملف التكوين.
 * @param array $rates المصفوفة المراد حفظها.
 * @return bool نجاح عملية الحفظ.
 */
function saveVacationRates($path, $rates) {
    $content = "<?php\n// تم توليد هذا الملف آلياً من صفحة الإعدادات\n\nreturn [\n";
    foreach ($rates as $type => $rate) {
        // إذا كان المفتاح هو مفتاح العطلة الأسبوعية وحجمه مصفوفة، نستخدم var_export للحفظ
        if ($type === 'WEEKEND_DAYS_ISO' && is_array($rate)) {
            $content .= "    " . var_export($type, true) . " => " . var_export($rate, true) . ",\n";
        } else {
            // لبقية أنواع الإجازات (التي هي أرقام عشرية)
            $content .= "    " . var_export($type, true) . " => " . number_format((float)$rate, 2) . ",\n";
        }
    }
    $content .= "];\n";

    // كتابة المحتوى في الملف
    if (file_put_contents($path, $content) !== false) {
        return true;
    }
    return false;
}

// =========================================================================
// معالجة النموذج المُرسل
// =========================================================================

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_rates'])) {
    $newRates = [];
    $is_valid = true;
    $postedTypes = $_POST['vacation_type'] ?? [];
    $postedRates = $_POST['pay_rate'] ?? [];

    // 1. معالجة إدخال أيام العطلة الأسبوعية الجديدة (WEEKEND_DAYS_ISO)
    $weekendDaysInput = $_POST['weekend_days_input'] ?? '';
    // تنظيف الإدخال وتحويله إلى مصفوفة أرقام صحيحة (1-7)
    $weekendDaysArray = array_filter(array_map('trim', explode(',', $weekendDaysInput)), 'is_numeric');
    
    $weekendDaysValid = [];
    foreach ($weekendDaysArray as $day) {
        $day = (int)$day;
        if ($day >= 1 && $day <= 7) {
            $weekendDaysValid[] = $day;
        }
    }
    // حفظ الأيام الصحيحة (مع إزالة التكرارات)
    $newRates['WEEKEND_DAYS_ISO'] = array_unique($weekendDaysValid);


    // 2. معالجة أسعار الإجازات
    $existingRates = loadVacationRates($configFilePath);

    foreach ($postedTypes as $index => $type) {
        $type = trim($type);
        // نتجاهل مفتاح WEEKEND_DAYS_ISO هنا لأننا عالجناه مسبقاً
        if ($type === 'WEEKEND_DAYS_ISO') continue; 
        
        $rate = $postedRates[$index] ?? 0.0;
        
        // التحقق من صحة القيمة (يجب أن تكون بين 0 و 1)
        $rate = filter_var($rate, FILTER_VALIDATE_FLOAT, ['options' => ['min_range' => 0, 'max_range' => 1]]);
        
        if ($rate === false) {
            $_SESSION['error_message'] = "❌ قيمة نسبة الدفع لـ **" . htmlspecialchars($type) . "** غير صحيحة. يجب أن تكون بين 0.00 و 1.00.";
            $is_valid = false;
            break;
        }

        $newRates[$type] = $rate;
    }

    if ($is_valid) {
        // دمج الأسعار القديمة مع التعديلات الجديدة (الأولوية للـ newRates)
        $finalRates = array_merge($existingRates, $newRates);
        
        if (saveVacationRates($configFilePath, $finalRates)) {
            $_SESSION['success_message'] = '✅ تم تحديث أسعار وإعدادات سياسة الدوام بنجاح.';
        } else {
            $_SESSION['error_message'] = '❌ فشل حفظ ملف التكوين. تحقق من صلاحيات الكتابة للمسار: **' . $configFilePath . '**';
        }
    }
    header('Location: manage_vacation_rates.php');
    exit();
}

// جلب الأسعار والإعدادات الحالية للعرض في النموذج
$vacationRates = loadVacationRates($configFilePath);
// فصل أيام العطلة الأسبوعية للعرض
$currentWeekendDays = $vacationRates['WEEKEND_DAYS_ISO'] ?? [5, 6];
unset($vacationRates['WEEKEND_DAYS_ISO']); 

// =========================================================================
// تصميم الواجهة (HTML)
// =========================================================================
?>

<div class="content-area">
    <div class="page-header">
        <h2 class="page-title"><i class="fas fa-file-invoice-dollar me-2"></i> <?= $pageTitle ?></h2>
        <p class="page-subtitle">تحديد نسبة الدفع لكل نوع إجازة وإدارة سياسة أيام الدوام.</p>
    </div>

    <?php if ($successMessage): ?>
        <div class="alert alert-success mt-3"><?= $successMessage ?></div>
    <?php endif; ?>
    
    <?php if ($errorMessage): ?>
        <div class="alert alert-danger mt-3"><?= $errorMessage ?></div>
    <?php endif; ?>

    <div class="card shadow-sm mb-4">
        <div class="card-header bg-primary text-white">
            <h5 class="mb-0">تعديل نسب الدفع (الخصم)</h5>
        </div>
        <div class="card-body">
            <form method="POST">
                <blockquote class="blockquote alert alert-info small">
                    <p class="mb-0">
                        **نسبة الدفع 1.00** تعني دفع الراتب اليومي بالكامل (**خصم 0%**).<br> 
                        **نسبة الدفع 0.75** تعني دفع 75% من الراتب اليومي (**خصم 25%**).
                    </p>
                </blockquote>
                <div class="table-responsive">
                    <table class="table table-bordered table-striped align-middle">
                        <thead>
                            <tr>
                                <th style="width: 40%;">نوع الإجازة</th>
                                <th style="width: 30%;">نسبة الدفع (0.00 - 1.00)</th>
                                <th style="width: 30%;">نسبة الخصم المئوية</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($vacationRates as $type => $rate): ?>
                                <?php 
                                    $isUnpaid = ($rate == 0.00 && in_array($type, ['بدون_راتب', 'غياب', 'غياب_دون_اذن'])); 
                                    $rate_display = number_format($rate, 2);
                                ?>
                                <tr>
                                    <td>
                                        <input type="hidden" name="vacation_type[]" value="<?= htmlspecialchars($type) ?>">
                                        <strong><?= htmlspecialchars($type) ?></strong>
                                    </td>
                                    <td>
                                        <input type="number" step="0.01" min="0.00" max="1.00" 
                                                    name="pay_rate[]" class="form-control text-center"
                                                    value="<?= $rate_display ?>"
                                                    <?= $isUnpaid ? 'readonly title="لا يمكن تعديل نسبة الدفع للأنواع غير المدفوعة مسبقاً"' : '' ?>>
                                    </td>
                                    <td>
                                        <?php $discount = (1 - $rate) * 100; ?>
                                        <span class="badge bg-<?= $discount > 0 ? 'danger' : 'success' ?> fs-6">
                                            <?= number_format($discount, 0) ?>%
                                        </span>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>

                <hr class="mt-5 mb-4">
                <h5 class="mb-3"><i class="fas fa-calendar-alt me-2"></i> إعدادات العطلة الأسبوعية</h5>
                <div class="row mb-4">
                    <div class="col-md-12">
                        <label class="form-label">أيام العطلة الأسبوعية المعتمدة (ISO Week Day Number)</label>
                        <blockquote class="blockquote alert alert-warning small">
                            <p class="mb-0">
                                🔢 يجب إدخال **أرقام أيام الأسبوع** مفصولة بفاصلة (,). نظام ISO-8601:<br>
                                **الإثنين=1، الثلاثاء=2، الأربعاء=3، الخميس=4، الجمعة=5، السبت=6، الأحد=7.**<br>
                                مثال: للجمعة والسبت أدخل: **5, 6**
                            </p>
                        </blockquote>
                        <?php
                        // تحويل مصفوفة الأيام إلى نص مفصول بفاصلة للعرض
                        $weekendDaysString = implode(', ', $currentWeekendDays);
                        ?>
                        <input type="text" name="weekend_days_input" class="form-control" 
                               value="<?= htmlspecialchars($weekendDaysString) ?>"
                               placeholder="مثال: 5, 6">
                        <input type="hidden" name="vacation_type[]" value="WEEKEND_DAYS_ISO"> 
                    </div>
                </div>
                <div class="text-end mt-4">
                    <button type="submit" name="save_rates" class="btn btn-success btn-lg">
                        <i class="fas fa-save me-2"></i> حفظ الإعدادات الجديدة
                    </button>
                </div>
            </form>
        </div>
    </div>
</div>

<?php include '../../includes/footer.php'; ?>