<?php
ob_start();
session_start();
include 'condb.php';
include 'navbar.php';


// ฟังก์ชันตรวจสอบความยาวและเงื่อนไขของรหัสผ่าน
function validateInput($username, $password) {

    global $name;

    /*
    if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
      $_SESSION['error_message'] = "ชื่อผู้ใช้ต้องเป็นอีเมลที่ถูกต้อง (เช่น example@example.com)";
      return false; // ให้การตรวจสอบไม่ผ่าน
    }
    */

    // ตรวจสอบว่า เป็นภาษาอังกฤษ ตัวเลข หรืออักขระที่อนุญาตเท่านั้น
    if (!preg_match('/^[A-Za-z0-9@\-]+$/', $username)) {
      $_SESSION['username_error_message'] = "ชื่อผู้ใช้ต้องประกอบด้วยตัวอักษร A-Z, ตัวเลข 0-9 และอักขระพิเศษ (เช่น @, -)";
      header('Location: ' . $_SERVER['PHP_SELF'] . '?username=' . urlencode($username) . '&name=' . urlencode($name));
      exit(); // หยุดการทำงานหลังจากส่งกลับ
    }

    if (!preg_match('/^[A-Za-z0-9@\-]+$/', $password)) {
      $_SESSION['password_error_message'] = "รหัสผ่านต้องประกอบด้วยตัวอักษร A-Z, ตัวเลข 0-9 และอักขระพิเศษ (เช่น @, -)";
      header('Location: ' . $_SERVER['PHP_SELF'] . '?username=' . urlencode($username) . '&name=' . urlencode($name));
      exit(); // หยุดการทำงานหลังจากส่งกลับ
    }

    if (strlen($password) <= 8) {
      $_SESSION['password_error_message'] = "รหัสผ่านต้องยาวมากกว่า 8 ตัวอักษร";
      header('Location: ' . $_SERVER['PHP_SELF'] . '?username=' . urlencode($username) . '&name=' . urlencode($name));
      exit(); // หยุดการทำงานหลังจากส่งกลับ
    }

    if (!preg_match('/[A-Z]/', $password)) {
      $_SESSION['password_error_message'] = "รหัสผ่านสามารถมีได้เฉพาะตัวอักษร A-Z พิมพ์ใหม่อย่างน้อย 1 ตัว";
      header('Location: ' . $_SERVER['PHP_SELF'] . '?username=' . urlencode($username) . '&name=' . urlencode($name));
      exit(); // หยุดการทำงานหลังจากส่งกลับ
    }

    return true;

}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    $status     = isset($_POST['status']) ? trim($_POST['status']) : '';
    $name       = isset($_POST['name']) ? trim($_POST['name']) : '';
    $username   = isset($_POST['username']) ? trim($_POST['username']) : '';
    $password   = isset($_POST['password']) ? trim($_POST['password']) : '';
    $confirmPassword = isset($_POST['confirm_password']) ? trim($_POST['confirm_password']) : '';

    if ($password !== $confirmPassword) {
      $_SESSION['passwordconfirm_error_message'] = "รหัสผ่านและยืนยันรหัสผ่านไม่ตรงกัน";
      header('Location: ' . $_SERVER['PHP_SELF'] . '?username=' . urlencode($username) . '&name=' . urlencode($name));
      exit(); // หยุดการทำงานหลังจากส่งกลับ
    }

    if (validateInput($username, $password)) {
        // ตรวจสอบว่าชื่อผู้ใช้มีอยู่ในฐานข้อมูลหรือไม่
        $checkStmt = $conn->prepare("SELECT * FROM tbl_login WHERE log_username = ?");
        if ($checkStmt === false) {
            die('SQL prepare error: ' . mysqli_error($conn)); // ใช้ mysqli_error() ในกรณีที่ prepare() ล้มเหลว
        }

        $checkStmt->bind_param("s", $username); // Bind parameter
        $checkStmt->execute();
        $result = $checkStmt->get_result();
        
        if ($result->num_rows > 0) {
          $_SESSION['username_error_message'] = "ชื่อผู้ใช้นี้มีอยู่ในระบบแล้ว";
          header('Location: ' . $_SERVER['PHP_SELF'] . '?username=' . urlencode($username) . '&name=' . urlencode($name));
          exit(); // หยุดการทำงานหลังจากส่งกลับ
        }

        date_default_timezone_set('Asia/Bangkok'); // ตั้งค่าเขตเวลาเป็นประเทศไทย
        $current_time = date("Y-m-d H:i:s"); // เวลารูปแบบ MySQL DATETIME

        // บันทึกข้อมูลลงฐานข้อมูล
        $stmt = $conn->prepare("INSERT INTO tbl_login (log_name, log_username, log_password, log_date, log_status) VALUES (?, ?, ?, ?, ?)");
        if ($stmt === false) {
            die('SQL prepare error: ' . mysqli_error($conn)); // ใช้ mysqli_error() ในกรณีที่ prepare() ล้มเหลว
        }

        // สร้างค่ารหัสผ่านที่เข้ารหัส
        $hashedPassword = password_hash($password, PASSWORD_DEFAULT);
        $stmt->bind_param("sssss", $name , $username, $hashedPassword, $current_time, $status); // Bind parameters
        $stmt->execute();

        if ($stmt->affected_rows > 0) {
            $_SESSION['username'] = $username;
            header("Location: dashboard.php");
            exit();
        } else {
             echo '<script>
                  setTimeout(function() {
                      Swal.fire({
                          title: "ข้อผิดพลาด",
                          text: "เกิดข้อผิดพลาดในการบันทึกข้อมูล",
                          icon: "error",
                          draggable: true,
                          showConfirmButton: false,
                          timer: 3000
                      }).then(() => {
                          window.location = "?username=' . urlencode($_GET['username']) . '&name=' . urlencode($_GET['name']) . '";
                      });
                  }, 0);
            </script>';
            exit();
        }
    }
}
?>

    <div class="container">
      <div class="row justify-content-md-center">
        <div class="col">
            <h1>ระบบ Login</h1>
            <form action="" method="POST">
                <div class="mb-3">
                    <label for="name" class="form-label">สถานะผู้ใช้งาน</label>
                    <select name="status" class="form-select" aria-label="Default select example" required>
                      <!-- <option selected>Open this select menu</option> -->
                      <option value="1">ADMIN</option>
                      <option value="2">USER</option>
                    </select>
                </div>
                <div class="mb-3">
                    <label for="name" class="form-label">ชื่อผู้ใช้</label>
                    <input type="text" class="form-control" id="name" name="name"
                    value="<?php echo isset($_GET['name']) ? htmlspecialchars($_GET['name']) : ''; ?>" required>
                </div>
                <div class="mb-3">
                    <label for="username" class="form-label">USERNAME</label>
                    <input type="text" class="form-control" id="username" name="username"
                    value="<?php echo isset($_GET['username']) ? htmlspecialchars($_GET['username']) : ''; ?>" required>
                    <?php if (isset($_SESSION['username_error_message'])): ?>
                        <div class="mt-2" style="color: red; font-weight: bold;">
                            <?php echo $_SESSION['username_error_message']; ?>
                        </div>
                        <?php unset($_SESSION['username_error_message']); ?>
                    <?php endif; ?>
                </div>
                <div class="mb-3">
                    <label for="password" class="form-label">รหัสผ่าน</label>
                    <input type="password" name="password" class="form-control" id="password" autocomplete="off" required>
                    <?php if (isset($_SESSION['password_error_message'])): ?>
                        <div class="mt-2" style="color: red; font-weight: bold;">
                            <?php echo $_SESSION['password_error_message']; ?>
                        </div>
                        <?php unset($_SESSION['password_error_message']); ?>
                    <?php endif; ?>
                </div>
                <div class="mb-3">
                    <label for="confirm_password" class="form-label">ยืนยันรหัสผ่าน</label>
                    <input type="password" name="confirm_password" class="form-control" id="confirm_password" autocomplete="off" required>
                    <?php if (isset($_SESSION['passwordconfirm_error_message'])): ?>
                        <div class="mt-2" style="color: red; font-weight: bold;">
                            <?php echo $_SESSION['passwordconfirm_error_message']; ?>
                        </div>
                        <?php unset($_SESSION['passwordconfirm_error_message']); ?>
                    <?php endif; ?>
                </div>
                <button type="submit" class="btn btn-primary">สมัครสมาชิก</button>
            </form>
        </div>
      </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
  </body>
</html>
