<?php
session_start();

require_once __DIR__ . '/../config/database.php';

if (!empty($_SESSION['user_id']) && in_array($_SESSION['user_role'] ?? '', ['teacher', 'admin'], true)) {
    header('Location: /EnglishSpeak/teacher/dashboard/');
    exit;
}

if (empty($_SESSION['teacher_csrf_token'])) {
    $_SESSION['teacher_csrf_token'] = bin2hex(random_bytes(32));
}

$error = '';
$username = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = strtolower(trim($_POST['username'] ?? ''));
    $password = $_POST['password'] ?? '';
    $csrfToken = $_POST['csrf_token'] ?? '';

    if ($csrfToken === '' || !hash_equals($_SESSION['teacher_csrf_token'], $csrfToken)) {
        $error = 'Phiên đăng nhập không hợp lệ. Vui lòng tải lại trang.';
    } elseif ($username === '' || $password === '') {
        $error = 'Vui lòng nhập tên đăng nhập và mật khẩu.';
    } else {
        try {
            $pdo = getDbConnection();
            $stmt = $pdo->prepare(
                "SELECT
                    u.id,
                    u.role,
                    u.username,
                    u.full_name,
                    u.email,
                    u.password_hash,
                    u.status,
                    tp.province AS teacher_province,
                    tp.school_name AS teacher_school_name,
                    tp.phone AS teacher_phone
                 FROM users u
                 LEFT JOIN teacher_profiles tp ON tp.user_id = u.id
                 WHERE u.username = :username
                   AND u.role IN ('teacher', 'admin')
                 LIMIT 1"
            );
            $stmt->execute(['username' => $username]);
            $user = $stmt->fetch();

            if (!$user || !password_verify($password, $user['password_hash'])) {
                $error = 'Tên đăng nhập hoặc mật khẩu không đúng.';
            } elseif ($user['status'] === 'pending') {
                $error = 'Tài khoản đang chờ Admin duyệt. Sau khi được duyệt, bạn mới có thể đăng nhập.';
            } elseif ($user['status'] !== 'active') {
                $error = 'Tài khoản đang bị khóa. Vui lòng liên hệ quản trị viên.';
            } else {
                session_regenerate_id(true);
                $_SESSION['user_id'] = (int) $user['id'];
                $_SESSION['user_role'] = $user['role'];
                $_SESSION['user_name'] = $user['full_name'];
                $_SESSION['user_username'] = $user['username'];
                $_SESSION['user_email'] = $user['email'];
                $_SESSION['teacher_province'] = (string)($user['teacher_province'] ?? '');
                $_SESSION['teacher_school_name'] = (string)($user['teacher_school_name'] ?? '');
                $_SESSION['teacher_phone'] = (string)($user['teacher_phone'] ?? '');

                $update = $pdo->prepare('UPDATE users SET last_login_at = NOW() WHERE id = :id');
                $update->execute(['id' => $user['id']]);

                $_SESSION['teacher_csrf_token'] = bin2hex(random_bytes(32));
                header('Location: /EnglishSpeak/teacher/dashboard/');
                exit;
            }
        } catch (PDOException $e) {
            error_log('Teacher login error: ' . $e->getMessage());
            if ($e->getCode() === '42S02') {
                $error = 'Chưa cài bảng tài khoản. Hãy mở teacher/auth/setup.php để thiết lập lần đầu.';
            } else {
                $error = 'Không thể kết nối hệ thống. Vui lòng thử lại.';
            }
        }
    }
}
?>
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Đăng nhập giáo viên | EnglishSpeak</title>
    <link rel="stylesheet" href="/EnglishSpeak/teacher/assets/css/login.css">
</head>
<body>
<main class="auth-shell">
    <section class="auth-card" aria-labelledby="login-title">
        <a class="brand" href="/teacher" aria-label="EnglishSpeak Teacher Portal">
            <span class="brand-mark">ES</span>
            <span><strong>English<span>Speak</span></strong><small>Teacher Portal</small></span>
        </a>

        <div class="auth-heading">
            <p class="eyebrow">Chào mừng trở lại</p>
            <h1 id="login-title">Đăng nhập giáo viên</h1>
            <p>Quản lý nội dung, học sinh và kết quả học tập tại một nơi.</p>
        </div>

        <?php if ($error !== ''): ?>
            <div class="alert" role="alert"><?= htmlspecialchars($error, ENT_QUOTES, 'UTF-8') ?></div>
        <?php endif; ?>

        <form method="post" novalidate>
            <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['teacher_csrf_token'], ENT_QUOTES, 'UTF-8') ?>">

            <label for="username">Tên đăng nhập</label>
            <input id="username" name="username" type="text" value="<?= htmlspecialchars($username, ENT_QUOTES, 'UTF-8') ?>" placeholder="Ví dụ: giaovien01" autocomplete="username" required autofocus>

            <label for="password">Mật khẩu</label>
            <div class="password-field">
                <input id="password" name="password" type="password" placeholder="Nhập mật khẩu" autocomplete="current-password" required>
                <button type="button" id="togglePassword" aria-label="Hiện mật khẩu">Hiện</button>
            </div>

            <button class="submit-button" type="submit">Đăng nhập</button>
        </form>

        <p class="setup-note">Chưa có tài khoản? <a href="/EnglishSpeak/teacher/register.php">Đăng ký giáo viên</a></p>
        <p class="setup-note">Lần đầu cài đặt? <a href="/EnglishSpeak/teacher/auth/setup.php">Tạo tài khoản giáo viên đầu tiên</a></p>
    </section>
</main>
<script>
const toggle = document.getElementById('togglePassword');
const password = document.getElementById('password');
toggle.addEventListener('click', () => {
    const show = password.type === 'password';
    password.type = show ? 'text' : 'password';
    toggle.textContent = show ? 'Ẩn' : 'Hiện';
    toggle.setAttribute('aria-label', show ? 'Ẩn mật khẩu' : 'Hiện mật khẩu');
});
</script>
</body>
</html>
