<?php
// teacher/availability.php - ثبت زمان‌های تدریس استاد با اعتبارسنجی کامل

session_start();
require_once '../config/database.php';
require_once '../includes/db.php';
require_once '../includes/auth.php';
require_once '../includes/functions.php';
require_once '../includes/settings.php';

if (!isLoggedIn()) {
    header('Location: ../login.php');
    exit;
}

$user = getCurrentUser();
if ($user['role_level'] != 6) {
    header('Location: ../admin/dashboard.php');
    exit;
}

$pageTitle = 'برنامه‌ریزی تدریس';
$pageSubtitle = 'ثبت اطلاعات و زمان‌های قابل تدریس';

$activeTerm = getActiveTerm();
if (!$activeTerm) {
    $message = '⚠️ هیچ ترم فعالی وجود ندارد. لطفاً با مدیر سامانه تماس بگیرید.';
    $messageType = 'warning';
}

$announcement = null;
if ($activeTerm) {
    $announcement = fetchOne(
        "SELECT * FROM announcements WHERE term_id = ? AND is_active = 1 ORDER BY id DESC LIMIT 1",
        [$activeTerm['id']]
    );
}

$teacherInfo = fetchOne("SELECT * FROM teacher_info WHERE teacher_id = ?", [$user['id']]);

$savedSlots = [];
$submissionStatus = null;
if ($activeTerm) {
    $savedSlots = fetchAll(
        "SELECT * FROM teacher_availability WHERE teacher_id = ? AND term_id = ?",
        [$user['id'], $activeTerm['id']]
    );
    
    if (!empty($savedSlots)) {
        $statuses = array_unique(array_column($savedSlots, 'status'));
        if (in_array('approved', $statuses)) {
            $submissionStatus = 'approved';
        } elseif (in_array('needs_revision', $statuses)) {
            $submissionStatus = 'needs_revision';
        } elseif (in_array('pending', $statuses)) {
            $submissionStatus = 'pending';
        } elseif (in_array('rejected', $statuses)) {
            $submissionStatus = 'rejected';
        }
    }
}

$message = '';
$messageType = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $action = $_POST['action'] ?? '';
    
    if ($submissionStatus == 'approved') {
        $message = '⛔ زمان‌های شما تأیید شده است و قابل ویرایش نیست. در صورت نیاز با مدیر تماس بگیرید.';
        $messageType = 'danger';
    } elseif ($action == 'save_all' && $activeTerm) {
        // ===== دریافت اطلاعات فرم =====
        $field_of_study = trim($_POST['field_of_study'] ?? '');
        $degree = trim($_POST['degree'] ?? '');
        $preferred_courses = trim($_POST['preferred_courses'] ?? '');
        $days = $_POST['days'] ?? [];
        $slots = $_POST['slots'] ?? [];
        
        // ===== اعتبارسنجی =====
        $errors = [];
        
        if (empty($field_of_study)) {
            $errors[] = 'لطفاً رشته تحصیلی خود را وارد کنید.';
        }
        if (empty($degree)) {
            $errors[] = 'لطفاً مدرک تحصیلی خود را انتخاب کنید.';
        }
        if (empty($preferred_courses)) {
            $errors[] = 'لطفاً حداقل یک درس مورد علاقه برای تدریس وارد کنید.';
        }
        if (empty($days)) {
            $errors[] = 'لطفاً حداقل یک روز را برای تدریس انتخاب کنید.';
        }
        if (empty($slots)) {
            $errors[] = 'لطفاً حداقل یک سانس زمانی را انتخاب کنید.';
        }
        
        if (!empty($errors)) {
            $message = '❌ لطفاً موارد زیر را تکمیل کنید:<br>' . implode('<br>', $errors);
            $messageType = 'danger';
        } else {
            $allSuccess = true;
            
            // ===== ۱. ذخیره اطلاعات تحصیلی =====
            if ($teacherInfo) {
                $result = updateData('teacher_info', [
                    'field_of_study' => $field_of_study,
                    'degree' => $degree,
                    'preferred_courses' => $preferred_courses
                ], 'teacher_id = :teacher_id', ['teacher_id' => $user['id']]);
            } else {
                $result = insertData('teacher_info', [
                    'teacher_id' => $user['id'],
                    'field_of_study' => $field_of_study,
                    'degree' => $degree,
                    'preferred_courses' => $preferred_courses
                ]);
            }
            
            if ($result === false) {
                $allSuccess = false;
                $message = '❌ خطا در ذخیره اطلاعات تحصیلی.';
                $messageType = 'danger';
            }
            
            // ===== ۲. ذخیره زمان‌های تدریس =====
            if ($allSuccess) {
                deleteData('teacher_availability', 'teacher_id = :teacher_id AND term_id = :term_id', [
                    'teacher_id' => $user['id'],
                    'term_id' => $activeTerm['id']
                ]);
                
                foreach ($days as $day) {
                    foreach ($slots as $slot) {
                        $data = [
                            'teacher_id' => $user['id'],
                            'term_id' => $activeTerm['id'],
                            'day_of_week' => $day,
                            'time_slot' => $slot,
                            'status' => 'pending'
                        ];
                        $result = insertData('teacher_availability', $data);
                        if (!$result) {
                            $allSuccess = false;
                        }
                    }
                }
            }
            
            if ($allSuccess) {
                $message = '✅ اطلاعات و زمان‌های تدریس با موفقیت ثبت شد و در انتظار تأیید مدیر است.';
                $messageType = 'success';
                $submissionStatus = 'pending';
                $teacherInfo = fetchOne("SELECT * FROM teacher_info WHERE teacher_id = ?", [$user['id']]);
                $savedSlots = fetchAll(
                    "SELECT * FROM teacher_availability WHERE teacher_id = ? AND term_id = ?",
                    [$user['id'], $activeTerm['id']]
                );
            } elseif (empty($message)) {
                $message = '❌ خطا در ذخیره اطلاعات. لطفاً دوباره تلاش کنید.';
                $messageType = 'danger';
            }
        }
    }
}

$content = 'availability-content.php';
require_once '../includes/layout.php';
?>