<?php
// إيقاف الأخطاء النصية لضمان رد JSON نظيف
error_reporting(0);
ini_set('display_errors', 0);
ob_start();

session_start();
require_once 'db_connect.php';

header('Content-Type: application/json; charset=utf-8');

// حماية الصفحة للمدير فقط
if (!isset($_SESSION['loggedin']) || $_SESSION['role'] !== 'admin') {
    ob_end_clean();
    echo json_encode(['status' => 'error', 'message' => 'غير مصرح لك']); 
    exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $student_id = $conn->real_escape_string($_POST['student_id'] ?? '');
    $subject = $conn->real_escape_string($_POST['subject'] ?? '');
    $grace_value = floatval($_POST['grace_value'] ?? 0);
    $school_name = $conn->real_escape_string($_SESSION['school_name'] ?? '');

    if (empty($student_id) || empty($subject)) {
        ob_end_clean();
        echo json_encode(['status' => 'error', 'message' => 'بيانات مفقودة']);
        exit;
    }

    // 1. جلب الدرجات الحالية للطالب قبل الإضافة
    $q = "SELECT * FROM control_grades WHERE student_id = '$student_id' AND subject_name = '$subject' AND school_name = '$school_name' LIMIT 1";
    $res = $conn->query($q);
    
    if ($res && $res->num_rows > 0) {
        $row = $res->fetch_assoc();
        
        // جلب الدرجات الأصلية (لأننا قد نحتاج للعودة لها إذا مسح الإداري المساعدة، ولتفادي التراكم اللانهائي)
        // الفكرة: نحتفظ بالدرجة الأصلية في أعمدة مخفية (إن لم تكن موجودة ننشئها)
        $check_col = $conn->query("SHOW COLUMNS FROM control_grades LIKE 'orig_term_1'");
        if($check_col && $check_col->num_rows == 0) {
            $conn->query("ALTER TABLE control_grades ADD orig_term_1 DECIMAL(5,2) NULL AFTER term_1, ADD orig_mid_year DECIMAL(5,2) NULL AFTER mid_year, ADD orig_term_2 DECIMAL(5,2) NULL AFTER term_2");
        }

        // إذا كانت هذه أول مرة نضع مساعدة، نحفظ الدرجات الأصلية
        $orig_t1 = $row['orig_term_1'] ?? $row['term_1'];
        $orig_mid = $row['orig_mid_year'] ?? $row['mid_year'];
        $orig_t2 = $row['orig_term_2'] ?? $row['term_2'];

        // حفظ الأصول إذا لم تكن محفوظة مسبقاً
        if ($row['orig_term_1'] === null) {
            $conn->query("UPDATE control_grades SET orig_term_1 = term_1, orig_mid_year = mid_year, orig_term_2 = term_2 WHERE id = " . $row['id']);
            $orig_t1 = $row['term_1'];
            $orig_mid = $row['mid_year'];
            $orig_t2 = $row['term_2'];
        }

        // 2. توزيع القرار
        // إذا أعطى الإدارة 6 درجات قرار، تقسم على 3 = 2 درجات لكل فصل
        $distributed_grace = $grace_value / 3;

        // تطبيق المساعدة على الدرجات الأصلية (مع التأكد من عدم تجاوز 100)
        $new_t1 = ($orig_t1 !== null) ? min(100, $orig_t1 + $distributed_grace) : null;
        $new_mid = ($orig_mid !== null) ? min(100, $orig_mid + $distributed_grace) : null;
        $new_t2 = ($orig_t2 !== null) ? min(100, $orig_t2 + $distributed_grace) : null;

        // 3. إعادة احتساب السعي السنوي الجديد
        $annual_sum = 0; $annual_count = 0;
        if ($new_t1 !== null) { $annual_sum += $new_t1; $annual_count++; }
        if ($new_mid !== null) { $annual_sum += $new_mid; $annual_count++; }
        if ($new_t2 !== null) { $annual_sum += $new_t2; $annual_count++; }

        $new_annual = null;
        if ($annual_count == 3) {
            // (ف1 + نصف السنة + ف2) / 3
            $new_annual = round($annual_sum / 3, 2);
        } elseif ($annual_count > 0) {
            // كاحتياط لو لم يكمل الفصول، يقسم على عدد الفصول المتاحة
            $new_annual = round($annual_sum / $annual_count, 2);
        }

        // تحديث قاعدة البيانات بالدرجات الجديدة والسعي الجديد وتسجيل قيمة الـ grace
        $t1_val = $new_t1 !== null ? $new_t1 : "NULL";
        $mid_val = $new_mid !== null ? $new_mid : "NULL";
        $t2_val = $new_t2 !== null ? $new_t2 : "NULL";
        $ann_val = $new_annual !== null ? $new_annual : "NULL";

        $update_q = "UPDATE control_grades SET 
                        admin_grace = $grace_value,
                        term_1 = $t1_val,
                        mid_year = $mid_val,
                        term_2 = $t2_val,
                        annual_effort = $ann_val
                     WHERE id = " . $row['id'];

        if ($conn->query($update_q)) {
            ob_end_clean();
            echo json_encode(['status' => 'success', 'message' => 'تم توزيع الدرجات واحتساب السعي بنجاح']);
        } else {
            ob_end_clean();
            echo json_encode(['status' => 'error', 'message' => 'خطأ في التحديث: ' . $conn->error]);
        }
    } else {
        ob_end_clean();
        echo json_encode(['status' => 'error', 'message' => 'لا توجد درجات مسجلة لهذا الطالب في هذه المادة بعد.']);
    }
    exit;
}
?>