<?php
include('conn.php');
session_start();

// Ambil token dan user_id dari URL
$token = $_GET['token'];
$user_id = $_GET['user_id'];

// Semak jika token dan user_id wujud dalam URL
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($token) && isset($user_id)) {

        // Semak token dalam database berdasarkan token dan user_id
        $stmt = $conn->prepare("SELECT * FROM password_resets WHERE token = ? AND user_id = ?");
        $stmt->bind_param("si", $token, $user_id);
        $stmt->execute();
        $result = $stmt->get_result();

        if ($result->num_rows > 0) {
            $row = $result->fetch_assoc();
            $email = $row['email'];
            $expiry = strtotime($row['expiry']);
            $status = $row['status']; // Ambil status token

            // Periksa jika token telah tamat tempoh atau telah digunakan
            if ($expiry < time()) {
                $error = "Token telah tamat tempoh. Sila minta token baru.";
                $email = null; // Pastikan borang reset tidak muncul
                $token_expired = true; // Tetapkan flag untuk token tamat tempoh
            } elseif ($status == 0) {
                // Jika token telah digunakan, tidak boleh reset kata laluan lagi
                $error = "Token telah digunakan. Sila minta token baru.";
                $email = null; // Pastikan borang reset tidak muncul
            } else {
                // Token sah dan belum digunakan
                if (isset($_POST['new_password']) && isset($_POST['confirm_password'])) {
                    if (!empty($_POST['new_password']) && !empty($_POST['confirm_password'])) {
                        $new_password = $_POST['new_password'];
                        $confirm_password = $_POST['confirm_password'];

                        // Periksa jika kata laluan baru dan pengesahan kata laluan sepadan
                        if ($new_password === $confirm_password) {
                            $hashed_password = password_hash($new_password, PASSWORD_DEFAULT);

                            // Kemaskini kata laluan dalam jadual pengguna
                            $stmt_update = $conn->prepare("UPDATE users SET password = ? WHERE email = ?");
                            $stmt_update->bind_param("ss", $hashed_password, $email);

                            if ($stmt_update->execute()) {
                                // Setkan status token kepada 0 (tidak aktif)
                                $stmt_update_token = $conn->prepare("UPDATE password_resets SET status = '0' WHERE token = ?");
                                $stmt_update_token->bind_param("s", $token);
                                $stmt_update_token->execute();

                                // Simpan mesej kejayaan dalam sesi
                                $_SESSION['success'] = "Kata laluan berjaya ditetapkan semula. Sila log masuk dengan kata laluan baru.";

                                // Redirect ke halaman reset_password dengan mesej
                                header("Location: resetpassword.php");
                                exit();
                            } else {
                                $error = "Ralat semasa mengemas kini kata laluan.";
                            }
                        } else {
                            $error = "Kata laluan baru dan pengesahan kata laluan tidak sepadan.";
                        }
                    } else {
                        $error = "Sila isi kata laluan baru dan pengesahan.";
                    }
                }
            }
        } else {
            $error = "Token tidak sah. Sila pastikan token yang dimasukkan betul.";
            $email = null; // Pastikan borang reset tidak muncul
        }
        $stmt->close();
    } else {
        $error = "Token atau ID pengguna tidak sah.";
    }
}

// Mesej kejayaan (dipaparkan selepas kata laluan berjaya reset)
if (isset($_SESSION['success'])) {
    $successMessage = $_SESSION['success'];
    unset($_SESSION['success']); // Clear the success message after using it
}
?>

<!DOCTYPE html>
<html lang="en">
<?php include('header.php'); ?>

<body>
    <section id="wrapper">
        <div class="login-register" style="background-image:url(../assets/images/background/login-register.jpg);">
            <div class="login-box card">
                <div class="card-body">
                    <h4 class="text-center">Tetapkan Semula Kata Laluan</h4>

                    <?php if (isset($error)): ?>
                    <div class="alert alert-danger text-center">
                        <?php echo $error; ?>
                        
                        <?php if ($error === "Token telah tamat tempoh. Sila minta token baru." || $error === "Token telah digunakan. Sila minta token baru."): ?>
                            <br>
                            <button class="btn btn-secondary btn-rounded mt-2" onclick="window.location.href='forgot_password.php'">OK</button>
                        <?php endif; ?>
                    </div>
                    <?php endif; ?>     

                    <?php if (isset($successMessage)): ?>
                        <div class="alert alert-success"><?php echo $successMessage; ?></div>
                        <div class="text-center">
                            <button class="btn btn-info btn-rounded" onclick="window.location.href='index.php'">OK</button>
                        </div>
                    <?php else: ?>
                        <!-- Form untuk reset kata laluan hanya muncul jika token sah -->
                        <form class="form-horizontal form-material" method="post">
                            <input type="hidden" name="token" value="<?php echo htmlspecialchars($token); ?>">
                            <div class="form-group">
                                <label for="new_password">Kata Laluan Baru:</label>
                                <input type="password" name="new_password" class="form-control" required>
                            </div>
                            <div class="form-group">
                                <label for="confirm_password">Pengesahan Kata Laluan:</label>
                                <input type="password" name="confirm_password" class="form-control" required>
                            </div>
                            <div class="form-group text-center">
                                <button class="btn btn-info btn-rounded" type="submit">Kemaskini Kata Laluan</button>
                            </div>
                        </form>
                    <?php endif; ?>
                </div>
            </div>
        </div>
    </section>

    <?php include('jquery.php'); ?>
</body>
</html>