<?php
session_start();

// تحديد مسار ملف الاتصال بقاعدة البيانات
$db_path = file_exists('../db_connect.php') ? '../db_connect.php' : (file_exists('db_connect.php') ? 'db_connect.php' : null);
if ($db_path) { require_once $db_path; } else { die("خطأ: لم يتم العثور على ملف قاعدة البيانات."); }

// 1. جلب اسم المدرسة
$school = $conn->query("SELECT school_name FROM schools LIMIT 1")->fetch_assoc();
$current_school = $school['school_name'] ?? 'المدرسة';

// 2. تفريغ الجدول القديم لهذه المدرسة
$conn->query("DELETE FROM generated_schedules WHERE school_name = '$current_school'");

// 3. جلب جميع القيود والمواد
$rules_query = $conn->query("SELECT * FROM schedule_rules WHERE school_name = '$current_school'");
$rules = [];
if ($rules_query) { while($row = $rules_query->fetch_assoc()) { $rules[] = $row; } }

$days_of_week = ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'السبت'];
$max_periods = 7;

$teacher_schedule = []; 
$class_schedule = [];   

$success_count = 0;
$failed_count = 0;

foreach ($rules as $rule) {
    $teacher = trim($rule['teacher_name']);
    $stage = trim($rule['stage_name']);
    $dept = trim($rule['department_name']);
    $sec = trim($rule['section_name']);
    $subject = trim($rule['subject_name']);
    $sessions_needed = (int)$rule['weekly_sessions'];
    
    $class_key = $stage . '_' . $dept . '_' . $sec;
    
    // 🚀 تنظيف المسافات من الأيام والحصص وتحويل الحصص إلى أرقام صحيحة 100% 🚀
    $allowed_days = !empty($rule['allowed_days']) ? array_map('trim', explode(',', $rule['allowed_days'])) : $days_of_week;
    
    $allowed_periods = [];
    if (!empty($rule['allowed_periods'])) {
        $parts = explode(',', $rule['allowed_periods']);
        foreach($parts as $p) {
            $allowed_periods[] = (int)trim($p); // إجبار التحويل إلى رقم لتجنب مشكلة المسافات
        }
    } else {
        $allowed_periods = range(1, $max_periods);
    }
    
    $sessions_assigned = 0;
    $attempts = 0;
    
    while ($sessions_assigned < $sessions_needed && $attempts < 50) {
        foreach ($allowed_days as $day) {
            if ($sessions_assigned >= $sessions_needed) break;
            
            foreach ($allowed_periods as $period) {
                if (!isset($teacher_schedule[$teacher][$day][$period]) && !isset($class_schedule[$class_key][$day][$period])) {
                    
                    $start_time = '08:00:00';
                    $end_time = '08:45:00';
                    
                    $stmt = $conn->prepare("INSERT INTO generated_schedules (school_name, stage_name, department_name, section_name, day_of_week, period_number, subject_name, teacher_name, start_time, end_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
                    $stmt->bind_param("sssssissss", $current_school, $stage, $dept, $sec, $day, $period, $subject, $teacher, $start_time, $end_time);
                    
                    if ($stmt->execute()) {
                        $teacher_schedule[$teacher][$day][$period] = true;
                        $class_schedule[$class_key][$day][$period] = true;
                        $sessions_assigned++;
                        break; 
                    }
                }
            }
        }
        $attempts++;
    }
    
    if ($sessions_assigned < $sessions_needed) {
        $failed_count += ($sessions_needed - $sessions_assigned);
    } else {
        $success_count += $sessions_assigned;
    }
}

$message = "✅ تم بناء الجداول الذكية بنجاح!\\n\\n";
$message .= "📊 تم تسكين: $success_count حصة بدقة ضمن الشروط المحددة.\\n";
if ($failed_count > 0) {
    $message .= "⚠️ تعذر تسكين: $failed_count حصة (بسبب تضييق شروط المدرس أو تضارب جدوله).\\nيرجى تخفيف القيود عليه والمحاولة مجدداً.";
}

echo "<script>
    alert('$message');
    window.location.href = '../view_schedule.php';
</script>";
?>