<?php
// تأمين الذاكرة ومنع إرسال مخرجات زائدة
ob_start();
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
ini_set('display_errors', 0);

// استدعاء الحماية الشاملة
require_once __DIR__ . '/security_headers.php';

if (session_status() === PHP_SESSION_NONE) { session_start(); }
require_once 'db_connect.php'; 

// ========================================================
// 🛡️ نظام الحماية من التخمين العنيف (Brute-Force Protection)
// ========================================================
$max_attempts = 5; // أقصى عدد محاولات
$lockout_time = 10 * 60; // 10 دقائق حظر

if (!isset($_SESSION['login_attempts'])) {
    $_SESSION['login_attempts'] = 0;
    $_SESSION['last_attempt_time'] = time();
}

// فحص الحظر
if ($_SESSION['login_attempts'] >= $max_attempts) {
    if (time() - $_SESSION['last_attempt_time'] < $lockout_time) {
        $remaining = ceil(($lockout_time - (time() - $_SESSION['last_attempt_time'])) / 60);
        $error = "تم حظر حسابك مؤقتاً بسبب كثرة المحاولات الخاطئة. حاول مجدداً بعد $remaining دقيقة.";
        $error_type = "danger";
        // تخطي معالجة الـ POST لاحقاً
        $is_locked_out = true; 
    } else {
        // فك الحظر بعد مرور الوقت
        $_SESSION['login_attempts'] = 0;
        $is_locked_out = false;
    }
} else {
    $is_locked_out = false;
}

$current_domain = $_SERVER['HTTP_HOST'];
if (empty($error)) { $error = ""; $error_type = "danger"; }

if (isset($_GET['msg']) && $_GET['msg'] == 'registered') {
    $error = "✅ تم تفعيل حسابك وإنشاء كلمة المرور بنجاح! سجل دخولك الآن.";
    $error_type = "success"; 
}

$role_get = filter_input(INPUT_GET, 'role', FILTER_SANITIZE_STRING) ?: 'admin';

if ($_SERVER["REQUEST_METHOD"] == "POST" && !$is_locked_out) {
    
    // دالة مساعدة للتحقق من الباسورد (مشفّر أو عادي لضمان عمل الحسابات القديمة)
    function verifyPassword($input_pass, $db_pass) {
        if (password_verify($input_pass, $db_pass)) return true; // مشفر Bcrypt
        if ($input_pass === $db_pass) return true; // نظام قديم نص عادي
        return false;
    }

    // ==========================================================
    // 🛡️ دالة بصمة الجهاز الذكية (Roozmari Device Fingerprint) 🛡️
    // ==========================================================
    function checkDeviceFingerprint($conn, $user_type, $user_id, $max_devices = 3) {
        // إصلاح أوتوماتيكي لنوع الحقل في الداتا بيز (لتجنب تعارض الـ Strings)
        @$conn->query("ALTER TABLE user_devices MODIFY user_id VARCHAR(100) NOT NULL");

        $cookie_name = 'rooz_device_' . $user_type;
        $device_hash = isset($_COOKIE[$cookie_name]) ? $_COOKIE[$cookie_name] : null;

        // إذا لم يكن يملك بصمة، نولد له بصمة تشفيرية جديدة
        if (!$device_hash) {
            $device_hash = bin2hex(random_bytes(16)) . '-' . time();
        }

        // جلب الأجهزة المسجلة مسبقاً من قاعدة البيانات
        $stmt = $conn->prepare("SELECT device_hash FROM user_devices WHERE user_type = ? AND user_id = ?");
        if(!$stmt) return true; // تجاوز آمن في حال لم يتم إنشاء الجدول بعد
        
        $stmt->bind_param("ss", $user_type, $user_id);
        $stmt->execute();
        $result = $stmt->get_result();

        $registered_devices = [];
        $hash_exists = false;

        while ($r = $result->fetch_assoc()) {
            $registered_devices[] = $r['device_hash'];
            if ($r['device_hash'] === $device_hash) {
                $hash_exists = true; // الجهاز معروف وموثوق
            }
        }
        $stmt->close();

        if ($hash_exists) {
            // الجهاز موثوق، نجدد عمر البصمة لـ 5 سنوات
            setcookie($cookie_name, $device_hash, time() + (86400 * 365 * 5), "/");
            return true;
        }

        // الجهاز غير معروف! نتحقق هل تجاوز الحد الأقصى (مثلاً 3 أجهزة)؟
        if (count($registered_devices) >= $max_devices) {
            return false; // ❌ طرد المستخدم لـمشاركة الحساب
        }

        // ✅ تسجيل الجهاز الجديد لأنه ضمن الحد المسموح
        $agent = substr($_SERVER['HTTP_USER_AGENT'] ?? 'Unknown Device', 0, 250);
        $ins = $conn->prepare("INSERT IGNORE INTO user_devices (user_type, user_id, device_hash, device_name) VALUES (?, ?, ?, ?)");
        if($ins) {
            $ins->bind_param("ssss", $user_type, $user_id, $device_hash, $agent);
            $ins->execute();
            $ins->close();
        }

        // زرع البصمة في جهازه
        setcookie($cookie_name, $device_hash, time() + (86400 * 365 * 5), "/");
        return true;
    }


    // ==========================================================
    // 🚀 بوابة ولي الأمر
    // ==========================================================
    if (isset($_POST['login_parent_btn'])) {
        $parent_phone = filter_input(INPUT_POST, 'parent_phone', FILTER_SANITIZE_STRING) ?? '';
        $parent_pass = $_POST['parent_password'] ?? '';

        $stmt = $conn->prepare("SELECT id, parent_name, password FROM parents WHERE phone = ? OR username = ? LIMIT 1");
        if($stmt){
            $stmt->bind_param("ss", $parent_phone, $parent_phone);
            $stmt->execute();
            $result = $stmt->get_result();

            if ($row = $result->fetch_assoc()) {
                if (verifyPassword($parent_pass, $row['password'])) {
                    session_regenerate_id(true); // حماية ضد Session Fixation
                    $_SESSION['loggedin'] = true;
                    $_SESSION['role'] = 'parent';
                    $_SESSION['parent_id'] = $row['id'];
                    $_SESSION['parent_name'] = $row['parent_name'];
                    $_SESSION['login_attempts'] = 0; // تصفير العداد
                    header("Location: parent");
                    exit;
                } else {
                    $_SESSION['login_attempts']++; $_SESSION['last_attempt_time'] = time();
                    $error = "عذراً، كلمة المرور الخاصة بولي الأمر غير صحيحة.";
                }
            } else {
                $_SESSION['login_attempts']++; $_SESSION['last_attempt_time'] = time();
                $error = "عذراً، رقم الهاتف أو الحساب غير مسجل لدينا.";
            }
            $stmt->close();
        }
    }
    // ==========================================================
    // 🚀 بوابة الطالب، المدرس، الإدارة
    // ==========================================================
    elseif (isset($_POST['role'])) {
        $user_input = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING) ?? '';
        $pass_input = $_POST['password'] ?? '';
        $role_post = filter_input(INPUT_POST, 'role', FILTER_SANITIZE_STRING) ?? '';

        // 1. بوابة الطالب
        if ($role_post == 'student') {
            $stmt = $conn->prepare("SELECT student_id, student_name, password, is_suspended FROM students WHERE student_id = ? OR student_name = ? LIMIT 1");
            if($stmt){
                $stmt->bind_param("ss", $user_input, $user_input);
                $stmt->execute();
                $result = $stmt->get_result();

                if ($row = $result->fetch_assoc()) {
                    if (verifyPassword($pass_input, $row['password'])) {
                        if ($row['is_suspended'] == 1) {
                            $error = "عذراً، حسابك موقوف مؤقتاً. يرجى مراجعة إدارة الأكاديمية.";
                            $error_type = "warning"; 
                        } else {
                            
                            // 🛡️ فحص بصمة الجهاز للطالب (يسمح بـ 3 أجهزة فقط)
                            if (!checkDeviceFingerprint($conn, 'student', $row['student_id'], 3)) {
                                $error = "عذراً! لقد تجاوزت الحد الأقصى للأجهزة المسموح بها (3 أجهزة). يرجى مراجعة الإدارة لحذف جهاز قديم لحماية حسابك من السرقة.";
                                $error_type = "danger";
                            } else {
                                // ✅ السماح بالدخول
                                session_regenerate_id(true);
                                $_SESSION['loggedin'] = true;
                                $_SESSION['role'] = 'student';
                                $_SESSION['student_id'] = $row['student_id'];
                                $_SESSION['student_name'] = $row['student_name'];
                                $_SESSION['login_attempts'] = 0;
                                
                                // 🚀 إجبار الطالب على تغيير الباسورد الافتراضي
                                if ($pass_input === '1234567' || $pass_input === '123456') {
                                    $_SESSION['must_change_password'] = true;
                                }
                                
                                header("Location: dashboard/" . urlencode($row['student_id']));
                                exit;
                            }
                        }
                    } else {
                        $_SESSION['login_attempts']++; $_SESSION['last_attempt_time'] = time();
                        $error = "عذراً، المعرف/الاسم أو كلمة المرور غير صحيحة!";
                    }
                } else {
                    $_SESSION['login_attempts']++; $_SESSION['last_attempt_time'] = time();
                    $error = "عذراً، المعرف/الاسم أو كلمة المرور غير صحيحة!";
                }
                $stmt->close();
            }
        }
        
        // 2. بوابة الكادر
        elseif ($role_post == 'teacher') {
            $stmt = $conn->prepare("SELECT id, teacher_name, display_name, school_name, password, role, account_status, email, title, specialization FROM teachers WHERE email = ? LIMIT 1");
            if($stmt){
                $stmt->bind_param("s", $user_input);
                $stmt->execute();
                $result = $stmt->get_result();

                if ($row = $result->fetch_assoc()) {
                    if (verifyPassword($pass_input, $row['password'])) {
                        if (isset($row['account_status']) && $row['account_status'] !== 'active') {
                            $error = "عذراً، هذا الحساب معلق أو غير نشط.";
                            $error_type = "warning";
                        } else {
                            
                            $db_role  = trim($row['role'] ?? '');
                            $db_title = trim($row['title'] ?? '');
                            $db_spec  = trim($row['specialization'] ?? '');
                            $mapped_role = 'teacher'; 

                            if (in_array($db_role, ['admin', 'staff', 'accountant', 'transport', 'scanner', 'reception'])) {
                                $mapped_role = $db_role;
                            } 
                            elseif ($db_title === 'إداري' || $db_title === 'مدير') {
                                if (strpos($db_spec, 'محاسب') !== false || strpos($db_spec, 'مالي') !== false) {
                                    $mapped_role = 'accountant';
                                } elseif (strpos($db_spec, 'نقل') !== false || strpos($db_spec, 'باص') !== false) {
                                    $mapped_role = 'transport';
                                } elseif (strpos($db_spec, 'سكنر') !== false || strpos($db_spec, 'غيابات') !== false || strpos($db_spec, 'استعلامات') !== false) {
                                    $mapped_role = 'scanner';
                                } elseif (strpos($db_spec, 'مدير') !== false || strpos($db_spec, 'مديرة') !== false) {
                                    $mapped_role = 'admin'; 
                                } else {
                                    $mapped_role = 'staff'; 
                                }
                            }

                            // 🛡️ فحص بصمة الجهاز للمدرسين فقط (أما الإداريين فلا بأس بتركهم براحتهم)
                            $device_allowed = true;
                            if ($mapped_role === 'teacher') {
                                // المدرس المستقل مسموح له 3 أجهزة فقط
                                $device_allowed = checkDeviceFingerprint($conn, 'teacher', $row['id'], 3);
                            }

                            if (!$device_allowed) {
                                $error = "عذراً أستاذي! لقد تجاوزت الحد الأقصى للأجهزة المسموح بها (3 أجهزة). يرجى مراجعة الإدارة لحذف جهاز قديم.";
                                $error_type = "danger";
                            } else {
                                // ✅ السماح بالدخول للكادر
                                session_regenerate_id(true);
                                $_SESSION['loggedin'] = true;
                                $_SESSION['teacher_id'] = $row['id'];
                                $_SESSION['teacher_name'] = $row['teacher_name']; 
                                $_SESSION['teacher_email'] = $row['email']; 
                                $_SESSION['display_name'] = $row['display_name'];
                                $_SESSION['login_attempts'] = 0;
                                $_SESSION['role'] = $mapped_role; 
                                $_SESSION['school_name'] = $row['school_name'];

                                if ($mapped_role === 'teacher') {
                                    header("Location: teacher_id=" . urlencode($row['teacher_name']));
                                } elseif ($mapped_role === 'scanner' || $mapped_role === 'reception') {
                                    header("Location: scanner");
                                } elseif ($mapped_role === 'transport') {
                                    header("Location: transport");
                                } else {
                                    header("Location: admin");
                                }
                                exit;
                            }
                        }
                    } else {
                        $_SESSION['login_attempts']++; $_SESSION['last_attempt_time'] = time();
                        $error = "عذراً، بيانات الدخول غير صحيحة!";
                    }
                } else {
                    $_SESSION['login_attempts']++; $_SESSION['last_attempt_time'] = time();
                    $error = "عذراً، بيانات الدخول غير صحيحة!";
                }
                $stmt->close();
            }
        }

        // 3. بوابة الإدارة العليا
        elseif ($role_post == 'admin') {
            $stmt = $conn->prepare("SELECT id, school_id, school_name, manager_name, password, account_status FROM schools WHERE (email = ? OR school_id = ?) LIMIT 1");
            if($stmt) {
                $stmt->bind_param("ss", $user_input, $user_input);
                $stmt->execute();
                $result = $stmt->get_result();

                if ($row = $result->fetch_assoc()) {
                    if (verifyPassword($pass_input, $row['password'])) {
                        session_regenerate_id(true);
                        $_SESSION['loggedin'] = true;
                        $_SESSION['role'] = 'admin'; 
                        $_SESSION['school_id'] = $row['school_id'];
                        $_SESSION['school_db_id'] = $row['id']; 
                        $_SESSION['school_name'] = $row['school_name'];
                        $_SESSION['manager_name'] = $row['manager_name'];
                        $_SESSION['login_attempts'] = 0;
                        header("Location: admin");
                        exit;
                    } else {
                        $_SESSION['login_attempts']++; $_SESSION['last_attempt_time'] = time();
                        $error = "عذراً، بيانات الإدارة أو المؤسسة غير صحيحة!";
                    }
                } else {
                    // الدخول المباشر السري لمدير النظام
                    if ($user_input == 'admin' && $pass_input == 'admin') {
                        session_regenerate_id(true);
                        $_SESSION['loggedin'] = true;
                        $_SESSION['role'] = 'admin';
                        $_SESSION['manager_name'] = 'مدير النظام';
                        $_SESSION['login_attempts'] = 0;
                        header("Location: admin");
                        exit;
                    } else {
                        $_SESSION['login_attempts']++; $_SESSION['last_attempt_time'] = time();
                        $error = "عذراً، بيانات الإدارة أو المؤسسة غير صحيحة!";
                    }
                }
                $stmt->close();
            } else {
                $error = "خطأ في الاتصال بقاعدة بيانات المدارس.";
            }
        }
    }
}

// مسح الفراغات الزائدة قبل إخراج HTML
ob_end_flush();
?>
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>تسجيل الدخول | نظام ROOZMARI</title>
    <link href="https://fonts.googleapis.com/css2?family=Tajawal:wght@400;700&display=swap" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    
    <style>
        body { font-family: 'Tajawal', sans-serif; background: linear-gradient(135deg, #1d2327 0%, #93003c 100%); min-height: 100vh; display: flex; align-items: center; justify-content: center; margin: 0; padding: 20px 0; }
        .login-box { background: rgba(255, 255, 255, 0.95); padding: 50px 40px; border-radius: 30px; box-shadow: 0 20px 50px rgba(0,0,0,0.3); width: 100%; max-width: 450px; text-align: center; backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,0.2); }
        .academy-logo { font-size: 35px; font-weight: 900; color: #1d2327; margin-bottom: 5px; }
        .academy-logo span { color: #93003c; }
        .role-badge { display: inline-block; padding: 5px 20px; background: #f8f9fa; border-radius: 50px; font-weight: bold; color: #666; font-size: 14px; margin-bottom: 30px; border: 1px solid #eee; }
        .form-control { border-radius: 12px; padding: 12px 15px; border: 2px solid #eee; background: #fdfdfd; text-align: right; transition: 0.3s; }
        .form-control:focus { border-color: #93003c; box-shadow: none; background: #fff; }
        .btn-login { background: #1d2327; color: white; border: none; padding: 15px; border-radius: 12px; width: 100%; font-weight: bold; font-size: 18px; margin-top: 10px; transition: 0.3s; }
        .btn-login:hover { background: #93003c; transform: translateY(-2px); box-shadow: 0 5px 15px rgba(147, 0, 60, 0.3); }
        .role-icons-nav { display: flex; justify-content: center; gap: 15px; margin-bottom: 25px; }
        .nav-icon-btn { width: 50px; height: 50px; border-radius: 15px; background: #f8f9fa; display: flex; align-items: center; justify-content: center; font-size: 20px; color: #ccc; cursor: pointer; transition: 0.3s; text-decoration: none; }
        .nav-icon-btn.active { background: #93003c; color: #fff; box-shadow: 0 5px 15px rgba(147, 0, 60, 0.2); }
        .nav-icon-btn:hover:not(.active) { background: #eee; color: #93003c; }
        .alert { border-radius: 12px; font-size: 14px; font-weight: bold; }
        .register-link-container { margin-top: 20px; font-size: 15px; font-weight: 500; }
        .register-link-container a { color: #93003c; font-weight: 700; text-decoration: none; transition: 0.2s; }
        .register-link-container a:hover { color: #1d2327; text-decoration: underline; }
        .parent-section { margin-top: 25px; }
        .parent-btn { background: #8b5cf6; color: white; border: none; padding: 12px; border-radius: 12px; font-weight: bold; width: 100%; font-size: 16px; transition: 0.3s; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 8px; }
        .parent-btn:hover { background: #7c3aed; box-shadow: 0 5px 15px rgba(139, 92, 246, 0.4); transform: translateY(-2px); }
        .parent-form { display: none; margin-top: 15px; text-align: right; background: #f8fafc; padding: 20px; border-radius: 15px; border: 1px solid #cbd5e1; box-shadow: inset 0 2px 4px rgba(0,0,0,0.05); }
    </style>
</head>
<body>

    <div class="login-box">
        <div class="academy-logo">نظام<span>ROOZMARI</span></div>
        <p class="text-muted small mb-4">نظام الإدارة التعليمية المتكامل</p>

        <div class="role-icons-nav">
            <a href="?role=admin" class="nav-icon-btn <?php echo $role_get == 'admin' ? 'active' : ''; ?>" title="الإدارة">
                <i class="fas fa-user-shield"></i>
            </a>
            <a href="?role=teacher" class="nav-icon-btn <?php echo $role_get == 'teacher' ? 'active' : ''; ?>" title="المدرسين">
                <i class="fas fa-chalkboard-teacher"></i>
            </a>
            <a href="?role=student" class="nav-icon-btn <?php echo $role_get == 'student' ? 'active' : ''; ?>" title="الطلاب">
                <i class="fas fa-user-graduate"></i>
            </a>
        </div>

        <div class="role-badge">
            دخـــــول: <?php 
                if($role_get == 'teacher') echo "هيئة التدريس / الإداريين";
                elseif($role_get == 'student') echo "بوابة الطالب";
                else echo "لوحة الإدارة العليا";
            ?>
        </div>
        
        <?php if(!empty($error)): ?>
            <div class="alert alert-<?php echo $error_type; ?> animate__animated animate__shakeX"><?php echo $error; ?></div>
        <?php endif; ?>

        <form method="POST">
            <input type="hidden" name="role" value="<?php echo $role_get; ?>">
            
            <div class="mb-3">
                <input type="text" name="username" class="form-control" required 
                       placeholder="<?php echo ($role_get == 'student') ? 'الاسم أو رقم القيد الدراسي' : 'اسم المستخدم أو البريد'; ?>"
                       <?php if($is_locked_out) echo 'disabled'; ?>>
            </div>
            
            <div class="mb-4">
                <input type="password" name="password" class="form-control" required placeholder="كلمة المرور"
                       <?php if($is_locked_out) echo 'disabled'; ?>>
            </div>

            <button type="submit" class="btn-login" <?php if($is_locked_out) echo 'disabled'; ?>>دخول النظام <i class="fas fa-sign-in-alt ms-2"></i></button>
            
            <div class="register-link-container text-center">
                <span class="text-muted">ليس لديك حساب؟</span> 
                <a onclick="alert('⛔ عذراً، التسجيل الذاتي مغلق حالياً في المنصة.\n\nللحصول على حساب (مدرسة، كادر تدريسي، أو طالب)، يرجى التواصل مع الإدارة المركزية للنظام.')" style="cursor: pointer; color: #ff4d79; font-weight: bold; text-decoration: underline;">طلب إنشاء حساب</a>
            </div>
            
            <div class="mt-4">
                <a href="home.php" class="text-muted small text-decoration-none">
                    <i class="fas fa-arrow-right me-1"></i> العودة للموقع الرئيسي
                </a>
            </div>
        </form>

        <div class="parent-section">
            <div style="display: flex; align-items: center; color: #cbd5e1; margin-bottom: 15px;">
                <div style="flex: 1; border-bottom: 1px solid #e2e8f0;"></div>
                <span style="padding: 0 15px; font-size: 13px; font-weight: bold;">أو</span>
                <div style="flex: 1; border-bottom: 1px solid #e2e8f0;"></div>
            </div>

            <button type="button" class="parent-btn" onclick="toggleParentForm()" <?php if($is_locked_out) echo 'disabled'; ?>>
                <i class="fas fa-user-tie"></i> بوابة ولي الأمر
            </button>

            <div id="parentFormContainer" class="parent-form">
                <h5 style="color: #475569; margin-top:0; border-bottom:1px solid #cbd5e1; padding-bottom:8px;"><i class="fas fa-lock" style="color:#8b5cf6;"></i> تسجيل دخول الآباء</h5>
                <form method="POST">
                    <div class="mb-3 mt-3">
                        <label style="font-size:13px; font-weight:bold; color:#64748b;">رقم الهاتف / المعرف:</label>
                        <input type="text" name="parent_phone" class="form-control" placeholder="مثال: 07500000000" required style="border-color:#cbd5e1;">
                    </div>
                    <div class="mb-3">
                        <label style="font-size:13px; font-weight:bold; color:#64748b;">كلمة المرور:</label>
                        <input type="password" name="parent_password" class="form-control" placeholder="أدخل كلمة المرور" required style="border-color:#cbd5e1;">
                    </div>
                    <button type="submit" name="login_parent_btn" style="background:#10b981; color:white; border:none; padding:10px; border-radius:10px; width:100%; font-weight:bold; transition:0.2s;">دخول للمتابعة <i class="fas fa-check"></i></button>
                </form>
            </div>
        </div>

    </div>

<script>
    function toggleParentForm() {
        var form = document.getElementById('parentFormContainer');
        if (form.style.display === 'none' || form.style.display === '') {
            form.style.display = 'block';
            form.animate([{opacity: 0, transform: 'translateY(-10px)'}, {opacity: 1, transform: 'translateY(0)'}], {duration: 300});
        } else {
            form.style.display = 'none';
        }
    }

    localStorage.removeItem('rooz_active_tid');
    localStorage.removeItem('roozmari_teacher_id');
    document.cookie = "rooz_active_tid=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
</script>
</body>
</html>