<?php
require_once "../includes/auth.php";
requireAdmin();

require_once "../includes/config.php";

$message = "";
$messageType = "";

$memberId = isset($_GET['id']) ? (int) $_GET['id'] : 0;

/*
|--------------------------------------------------------------------------
| รหัสผู้ดูแลที่กำลังเข้าสู่ระบบ
|--------------------------------------------------------------------------
| ระบบปัจจุบันเก็บรหัสผู้เข้าสู่ระบบไว้ใน session member_id
*/
$adminId = isset($_SESSION['member_id'])
    ? (int) $_SESSION['member_id']
    : 0;

if ($memberId <= 0) {
    die("ไม่พบรหัสสมาชิก");
}

/*
|--------------------------------------------------------------------------
| ดึงข้อมูลสมาชิก
|--------------------------------------------------------------------------
*/
$stmt = $conn->prepare("
    SELECT
        id,
        prefix,
        first_name,
        last_name,
        student_id,
        password_reset_at,
        must_change_password,
        last_password_change
    FROM members
    WHERE id = ?
");

$stmt->bind_param("i", $memberId);
$stmt->execute();

$result = $stmt->get_result();

if ($result->num_rows !== 1) {
    die("ไม่พบสมาชิกในระบบ");
}

$member = $result->fetch_assoc();
$stmt->close();

/*
|--------------------------------------------------------------------------
| รีเซ็ตรหัสผ่าน
|--------------------------------------------------------------------------
*/
if ($_SERVER["REQUEST_METHOD"] === "POST") {

    requireValidCsrf();

    $newPassword = trim($_POST['new_password'] ?? '');
    $confirmPassword = trim($_POST['confirm_password'] ?? '');

    if ($newPassword === '' || $confirmPassword === '') {

        $message = "กรุณากรอกรหัสผ่านใหม่ให้ครบทั้งสองช่อง";
        $messageType = "danger";

    } elseif (strlen($newPassword) < 8) {

        $message = "รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร";
        $messageType = "warning";

    } elseif ($newPassword !== $confirmPassword) {

        $message = "รหัสผ่านใหม่และการยืนยันรหัสผ่านไม่ตรงกัน";
        $messageType = "danger";

    } elseif ($adminId <= 0) {

        $message = "ไม่พบข้อมูลผู้ดูแลระบบ กรุณาออกจากระบบแล้วเข้าสู่ระบบใหม่";
        $messageType = "danger";

    } else {

        $hashedPassword = password_hash(
            $newPassword,
            PASSWORD_DEFAULT
        );

        /*
        |--------------------------------------------------------------------------
        | บันทึกข้อมูลการรีเซ็ต
        |--------------------------------------------------------------------------
        | password_reset_at       = วันเวลาที่แอดมินรีเซ็ต
        | password_reset_by       = รหัสแอดมินผู้ดำเนินการ
        | must_change_password    = 1 หมายถึงรอสมาชิกเปลี่ยนรหัส
        */
        $update = $conn->prepare("
            UPDATE members
            SET
                password = ?,
                password_reset_at = NOW(),
                password_reset_by = ?,
                must_change_password = 1
            WHERE id = ?
        ");

        $update->bind_param(
            "sii",
            $hashedPassword,
            $adminId,
            $memberId
        );

        if ($update->execute()) {

            $message = "รีเซ็ตรหัสผ่านเรียบร้อยแล้ว สมาชิกจะต้องเปลี่ยนรหัสผ่านใหม่เมื่อเข้าสู่ระบบ";
            $messageType = "success";

            /*
            |--------------------------------------------------------------------------
            | อัปเดตข้อมูลที่แสดงบนหน้าเว็บทันที
            |--------------------------------------------------------------------------
            */
            $member['password_reset_at'] = date("Y-m-d H:i:s");
            $member['must_change_password'] = 1;

        } else {

            $message = "ไม่สามารถรีเซ็ตรหัสผ่านได้ กรุณาลองอีกครั้ง";
            $messageType = "danger";
        }

        $update->close();
    }
}

include "../includes/header.php";
?>

<section class="form-section">

<div class="container py-4">

    <div class="text-center mb-4">

        <h2 class="display-6 fw-bold">
            🔑 รีเซ็ตรหัสผ่าน
        </h2>

        <p class="text-muted mb-1">
            สมาชิก:
            <?= htmlspecialchars(
                trim(
                    $member['prefix'] . " " .
                    $member['first_name'] . " " .
                    $member['last_name']
                ),
                ENT_QUOTES,
                'UTF-8'
            ) ?>
        </p>

        <p class="text-muted">
            รหัสนักศึกษา:
            <?= htmlspecialchars(
                $member['student_id'],
                ENT_QUOTES,
                'UTF-8'
            ) ?>
        </p>

    </div>

    <?php if ($message !== ""): ?>

        <div class="alert alert-<?= htmlspecialchars($messageType) ?>">
            <?= htmlspecialchars(
                $message,
                ENT_QUOTES,
                'UTF-8'
            ) ?>
        </div>

    <?php endif; ?>

    <?php if (!empty($member['password_reset_at'])): ?>

        <div class="alert alert-info">

            <div class="fw-bold mb-1">
                สถานะการรีเซ็ตรหัสผ่าน
            </div>

            <div>
                รีเซ็ตล่าสุด:
                <?= date(
                    "d/m/Y H:i",
                    strtotime($member['password_reset_at'])
                ) ?>
            </div>

            <div class="mt-1">

                <?php if ((int)$member['must_change_password'] === 1): ?>

                    <span class="badge bg-warning text-dark">
                        รอสมาชิกเปลี่ยนรหัสผ่าน
                    </span>

                <?php else: ?>

                    <span class="badge bg-success">
                        สมาชิกเปลี่ยนรหัสผ่านแล้ว
                    </span>

                <?php endif; ?>

            </div>

        </div>

    <?php endif; ?>

    <form method="post">

        <input
            type="hidden"
            name="csrf_token"
            value="<?= htmlspecialchars(
                csrfToken(),
                ENT_QUOTES,
                'UTF-8'
            ) ?>">

        <label class="form-label">
            รหัสผ่านใหม่
        </label>

        <input
            type="password"
            name="new_password"
            class="form-control"
            minlength="8"
            autocomplete="new-password"
            required>

        <small class="text-muted">
            รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร
        </small>

        <label class="form-label mt-3">
            ยืนยันรหัสผ่านใหม่
        </label>

        <input
            type="password"
            name="confirm_password"
            class="form-control"
            minlength="8"
            autocomplete="new-password"
            required>

        <div class="alert alert-warning mt-4 mb-0">

            <strong>หมายเหตุ:</strong>

            หลังจากรีเซ็ตรหัสผ่าน สมาชิกจะอยู่ในสถานะ
            “รอเปลี่ยนรหัสผ่าน” จนกว่าสมาชิกจะเข้าสู่ระบบ
            และกำหนดรหัสผ่านใหม่ด้วยตนเอง

        </div>

        <div class="text-center mt-4">

            <button
                type="submit"
                class="btn btn-primary"
                onclick="return confirm('ยืนยันการรีเซ็ตรหัสผ่านของสมาชิกคนนี้หรือไม่?');">

                <i class="fa-solid fa-key"></i>
                บันทึกรหัสผ่านใหม่

            </button>

            <a
                href="member_manage.php"
                class="btn btn-secondary">

                กลับหน้าจัดการสมาชิก

            </a>

        </div>

    </form>

</div>

</section>

<?php include "../includes/footer.php"; ?>