<?php
declare(strict_types=1);

require __DIR__ . '/../partials/auth.php';
require_once __DIR__ . '/../../config/database.php';

$pdo = getDbConnection();

$pageTitle = 'Settings';
$pageSubtitle = 'Quản lý tài khoản và mật khẩu';
$activeTeacherNav = '';

if (session_status() !== PHP_SESSION_ACTIVE) {
    session_start();
}

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

$userId = (int)($_SESSION['user_id'] ?? 0);
$userRole = strtolower(trim((string)($_SESSION['user_role'] ?? 'teacher')));
$flashSuccess = '';
$flashError = '';

if ($userId <= 0 || !in_array($userRole, ['teacher', 'admin'], true)) {
    header('Location: ../login.php');
    exit;
}

if (($_SERVER['REQUEST_METHOD'] ?? 'GET') === 'POST') {
    $csrf = (string)($_POST['csrf_token'] ?? '');
    $currentPassword = (string)($_POST['current_password'] ?? '');
    $newPassword = (string)($_POST['new_password'] ?? '');
    $confirmPassword = (string)($_POST['confirm_password'] ?? '');

    try {
        if ($csrf === '' || !hash_equals((string)$_SESSION['teacher_csrf_token'], $csrf)) {
            throw new RuntimeException('Yêu cầu không hợp lệ. Vui lòng tải lại trang.');
        }

        if ($currentPassword === '' || $newPassword === '' || $confirmPassword === '') {
            throw new RuntimeException('Vui lòng nhập đầy đủ các ô mật khẩu.');
        }

        if (strlen($newPassword) < 8) {
            throw new RuntimeException('Mật khẩu mới phải có ít nhất 8 ký tự.');
        }

        if ($newPassword !== $confirmPassword) {
            throw new RuntimeException('Mật khẩu nhập lại chưa khớp.');
        }

        if (hash_equals($currentPassword, $newPassword)) {
            throw new RuntimeException('Mật khẩu mới phải khác mật khẩu hiện tại.');
        }

        $stmt = $pdo->prepare(
            "SELECT id, password_hash
             FROM users
             WHERE id = :id
               AND role = :role
             LIMIT 1"
        );
        $stmt->execute([
            'id' => $userId,
            'role' => $userRole,
        ]);
        $user = $stmt->fetch(PDO::FETCH_ASSOC);

        if (!$user) {
            throw new RuntimeException('Không tìm thấy tài khoản.');
        }

        $currentHash = (string)($user['password_hash'] ?? '');
        if ($currentHash === '' || !password_verify($currentPassword, $currentHash)) {
            throw new RuntimeException('Mật khẩu hiện tại không đúng.');
        }

        $newHash = password_hash($newPassword, PASSWORD_DEFAULT);

        $update = $pdo->prepare(
            "UPDATE users
             SET password_hash = :password_hash,
                 updated_at = NOW()
             WHERE id = :id
               AND role = :role"
        );
        $update->execute([
            'password_hash' => $newHash,
            'id' => $userId,
            'role' => $userRole,
        ]);

        $flashSuccess = 'Đổi mật khẩu thành công.';
        $_SESSION['teacher_csrf_token'] = bin2hex(random_bytes(32));
    } catch (Throwable $e) {
        $flashError = $e instanceof RuntimeException
            ? $e->getMessage()
            : 'Không thể đổi mật khẩu. Vui lòng thử lại.';
    }
}

ob_start();
?>
<style>
.settings-page{display:grid;gap:20px;max-width:760px;margin:0 auto}
.settings-card{background:#fff;border:1px solid #e6ebf2;border-radius:18px;box-shadow:0 5px 18px rgba(18,38,63,.05);overflow:hidden}
.settings-head{padding:20px 22px;border-bottom:1px solid #edf1f6}
.settings-head h2{margin:0;color:#15233c;font-size:20px}
.settings-head p{margin:6px 0 0;color:#7a8799;font-size:13px}
.settings-body{padding:22px;display:grid;gap:16px}
.form-group{display:grid;gap:7px}
.form-group label{font-weight:750;color:#334155;font-size:13px}
.password-wrap{position:relative}
.password-wrap input{width:100%;min-height:44px;border:1px solid #dbe3ee;border-radius:11px;padding:10px 48px 10px 12px;font:inherit;outline:none;background:#fff}
.password-wrap input:focus{border-color:#7aa7f7;box-shadow:0 0 0 3px rgba(37,99,235,.10)}
.password-toggle{position:absolute;right:8px;top:50%;transform:translateY(-50%);border:0;background:transparent;cursor:pointer;font-size:18px;padding:7px;color:#64748b}
.password-note{font-size:12px;color:#7c8ba0;line-height:1.45}
.actions{display:flex;justify-content:flex-end;margin-top:4px}
.btn-save{border:0;border-radius:11px;background:#2563eb;color:#fff;font-weight:800;padding:11px 18px;cursor:pointer}
.notice{padding:13px 15px;border-radius:12px;font-size:13px}
.notice-ok{background:#ecfdf3;border:1px solid #bbf7d0;color:#166534}
.notice-error{background:#fff1f2;border:1px solid #fecdd3;color:#be123c}
</style>

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

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

    <section class="settings-card">
        <div class="settings-head">
            <h2>🔐 Đổi mật khẩu</h2>
            <p>Đổi mật khẩu cho chính tài khoản đang đăng nhập.</p>
        </div>

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

            <div class="form-group">
                <label for="current_password">Mật khẩu hiện tại</label>
                <div class="password-wrap">
                    <input id="current_password" name="current_password" type="password" autocomplete="current-password" required>
                    <button class="password-toggle" type="button" data-target="current_password" aria-label="Hiện mật khẩu" title="Hiện mật khẩu">👁</button>
                </div>
            </div>

            <div class="form-group">
                <label for="new_password">Mật khẩu mới</label>
                <div class="password-wrap">
                    <input id="new_password" name="new_password" type="password" autocomplete="new-password" minlength="8" required>
                    <button class="password-toggle" type="button" data-target="new_password" aria-label="Hiện mật khẩu" title="Hiện mật khẩu">👁</button>
                </div>
                <div class="password-note">Ít nhất 8 ký tự và phải khác mật khẩu hiện tại.</div>
            </div>

            <div class="form-group">
                <label for="confirm_password">Nhập lại mật khẩu mới</label>
                <div class="password-wrap">
                    <input id="confirm_password" name="confirm_password" type="password" autocomplete="new-password" minlength="8" required>
                    <button class="password-toggle" type="button" data-target="confirm_password" aria-label="Hiện mật khẩu" title="Hiện mật khẩu">👁</button>
                </div>
            </div>

            <div class="actions">
                <button class="btn-save" type="submit">Đổi mật khẩu</button>
            </div>
        </form>
    </section>
</div>

<script>
document.querySelectorAll('.password-toggle').forEach(button => {
    button.addEventListener('click', function () {
        const input = document.getElementById(this.dataset.target || '');
        if (!input) return;
        const showing = input.type === 'text';
        input.type = showing ? 'password' : 'text';
        this.textContent = showing ? '👁' : '🙈';
        this.setAttribute('aria-label', showing ? 'Hiện mật khẩu' : 'Ẩn mật khẩu');
        this.setAttribute('title', showing ? 'Hiện mật khẩu' : 'Ẩn mật khẩu');
    });
});
</script>
<?php
$content = ob_get_clean();
?>
<!DOCTYPE html>
<html lang="vi" data-theme="light">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="theme-color" content="#2563eb">
    <title><?= htmlspecialchars($pageTitle . ' | EnglishSpeak', ENT_QUOTES, 'UTF-8') ?></title>
    <link rel="stylesheet" href="../assets/css/app.css?v=1.1">
    <link rel="stylesheet" href="../assets/css/sidebar.css?v=1.1">
    <link rel="stylesheet" href="../assets/css/topbar.css?v=1.1">
    <link rel="stylesheet" href="../assets/css/cards.css?v=1.1">
    <link rel="stylesheet" href="../assets/css/buttons.css?v=1.1">
    <link rel="stylesheet" href="../assets/css/forms.css?v=1.1">
    <link rel="stylesheet" href="../assets/css/tables.css?v=1.1">
    <link rel="stylesheet" href="../assets/css/utilities.css?v=1.1">
</head>
<body>
<div class="app-shell">
    <?php require __DIR__ . '/../partials/sidebar.php'; ?>
    <div class="sidebar-overlay" id="sidebarOverlay" aria-hidden="true"></div>
    <main class="main-area">
        <?php require __DIR__ . '/../partials/topbar.php'; ?>
        <section class="page-content"><?= $content ?></section>
        <?php require __DIR__ . '/../partials/footer.php'; ?>
    </main>
</div>
<script src="../assets/js/app.js?v=1.1"></script>
</body>
</html>
