diff --git a/app/Controllers/EventController.php b/app/Controllers/EventController.php
index 97add5809aa25ce62621231bc8b28a823e7af203..c15062c65080ee1e518796a0be09a9dcaf2f284d 100644
--- a/app/Controllers/EventController.php
+++ b/app/Controllers/EventController.php
@@ -1,9 +1,15 @@
-
 <?php
 // app/Controllers/EventController.php
 
+ob_start();
 require_once(__DIR__ . '/../Models/Event.php');
 
+if (!isset($_SESSION["user_id"])) {
+    // User is not authenticated; redirect to login page
+    header("Location: /app/Views/login/login.php");
+    ob_end_flush();
+}
+
 class EventController {
     private $eventModel;
 
@@ -11,18 +17,18 @@ class EventController {
         $this->eventModel = new EventModel();
     }
 
-    public function createEvent($event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid) {
+    public function createEvent($stock, $event_date, $event_name, $gambar, $event_location, $vid){
         $eventModel = new EventModel();
-        $eventModel->createEvent($event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid);
+        $eventModel->createEvent($stock, $event_date, $event_name, $gambar, $event_location, $vid);
     }
 
     // public function getEvent($eventId) {
     //     return $this->eventModel->getEvent($eventId);
     // }
 
-    public function updateEvent($event_id, $event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid) {
+    public function updateEvent($eventId, $stock, $event_date, $event_name, $event_location, $gambar, $vid){
         $eventModel = new EventModel();
-        $eventModel->updateEvent($event_id, $event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid);
+        $eventModel->updateEvent($eventId, $stock, $event_date, $event_name, $event_location, $gambar, $vid);
     }
 
     public function deleteEvent($eventId) {
@@ -32,16 +38,37 @@ class EventController {
     public function getAllEvents() {
         return $this->eventModel->getAllEvents();
     }
-    
-    public function paginateEvents($page=1,$pagesize=10,$events) {
-        $maxpage = ceil(count($events)/$pagesize);
+
+    public function paginateEvents($events, $page = 1, $pagesize = 10) {
+        $maxpage = ceil(count($events) / $pagesize);
         if ($page > $maxpage) {
             $page = $maxpage;
         }
-        $offset = $pagesize * ($page-1);
+        $offset = $pagesize * ($page - 1);
         $selectedEvents = array_slice($events, $offset, $pagesize);
-
+    
         return $selectedEvents;
     }
+
+
+    public function searchEvents($searchQuery, $sortKey, $minStock = null) {
+        try {
+            return $this->eventModel->searchEvents($searchQuery, $sortKey, $minStock);
+        } catch (Exception $e) {
+            echo "Error searching events: " . $e->getMessage();
+            return [];
+        }
+    }
+
+    public function handleRequest() {
+        if (isset($_GET['action'])) {
+            if ($_GET['action'] === 'purchaseTicket') {
+                
+            } else {
+                // Handle other actions here, if needed
+            }
+        }
+    }
+
 }
 ?>
\ No newline at end of file
diff --git a/app/Controllers/PembelianController.php b/app/Controllers/PembelianController.php
index b83fa7b1e9d097b87d448e97ea7ef9e75e68a2b5..38421ab674065a34f2204a49d07d8a7b6f6dc694 100644
--- a/app/Controllers/PembelianController.php
+++ b/app/Controllers/PembelianController.php
@@ -1,12 +1,20 @@
 <?php
 // app/controllers/pembelianController.php
 
+ob_start();
 // require_once 'Pembelian.php';
 require_once(__DIR__ . '/../Models/Pembelian.php');
 
+if (!isset($_SESSION["user_id"])) {
+    // User is not authenticated; redirect to login page
+    header("Location: /app/Views/login/login.php");
+    ob_end_flush();
+}
+
 class PembelianController {
     private $pembelianModel;
-
+    
+    
     public function __construct() {
         $this->pembelianModel = new PembelianModel();
     }
@@ -31,7 +39,7 @@ class PembelianController {
         return $this->pembelianModel->getAllPembelian();
     }
 
-    public function paginateHistory($page=1,$pagesize=10,$pembelian) {
+    public function paginateHistory($pembelian,$page=1,$pagesize=10) {
         $maxpage = ceil(count($pembelian)/$pagesize);
         if ($page > $maxpage) {
             $page = $maxpage;
@@ -41,5 +49,33 @@ class PembelianController {
 
         return $selectedHistory;
     }
+
+    // Returns true if purchase succeeds
+    public function purchaseTicket($ticketId,$userId) {
+        // $purchases = $this->getAllPembelian();
+        // foreach ($purchases as $purchase) :
+        //     echo $purchase['pembelian_id'] . ': ' . $purchase['user_id'] . ', ' . $purchase['ticket_id'] . ', ' . $purchase['pembelian_created_time']."\n";
+        // endforeach;
+
+        $createdTime = date("Y-m-d H:i:s");
+        $this->createPembelian($ticketId,$userId,$createdTime);
+        // $purchases = $this->getAllPembelian();
+        // foreach ($purchases as $purchase) :
+        //     echo $purchase['pembelian_id'] . ': ' . $purchase['user_id'] . ', ' . $purchase['ticket_id'] . ', ' . $purchase['pembelian_created_time']."\n";
+        // endforeach;
+    }
+
+    public function handleRequest() {
+        if (isset($_GET['purchaseAction'])) {
+            if ($_GET['purchaseAction'] === 'purchaseTicket') {
+                $ticketId = $_POST['ticketId'];
+                $userId = $_POST['userId'];
+                $this->purchaseTicket($ticketId,$userId);
+            } else {
+                // Handle other actions here, if needed
+            }
+        }
+    }
+    
 }
 ?>
diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php
index b8e4e799195ffb6c596d7b42e446bd43d0e5fe82..4a36198c5b58cdaa7d602806c875caede5d715fd 100644
--- a/app/Controllers/TicketController.php
+++ b/app/Controllers/TicketController.php
@@ -1,9 +1,16 @@
 <?php
 // app/controllers/ticketController.php
 
+ob_start();
 // require_once 'Ticket.php';
 require_once(__DIR__ . '/../Models/Ticket.php');
 
+if (!isset($_SESSION["user_id"])) {
+    // User is not authenticated; redirect to login page
+    header("Location: /app/Views/login/login.php");
+    ob_end_flush();
+}
+
 class TicketController {
     private $ticketModel;
 
@@ -26,5 +33,21 @@ class TicketController {
     public function deleteTicket($ticketId) {
         return $this->ticketModel->deleteTicket($ticketId);
     }
+
+    public function previewTicket($ticketId) {
+        $ticket = $this->getTicket($ticketId);
+        
+        include(__DIR__ . '/../Views/pembelian/pembelian.php');
+    }
+
+    public function handleRequest() {
+        if (isset($_GET['action'])) {
+            if ($_GET['action'] === 'purchaseTicket') {
+                
+            } else {
+                // Handle other actions here, if needed
+            }
+        }
+    }
 }
 ?>
diff --git a/app/Controllers/UserController.php b/app/Controllers/UserController.php
index f644678939f1569675e8a337566a24bf47e46f34..5bfaee12a16a77392bb4f0260b85a47554a468dd 100644
--- a/app/Controllers/UserController.php
+++ b/app/Controllers/UserController.php
@@ -1,6 +1,6 @@
 <?php
 // app/controllers/userController.php
-
+ob_start();
 require_once(__DIR__ . '/../Models/User.php');
 
 
@@ -30,7 +30,7 @@ class UserController {
     public function getAllUsers() {
         return $this->userModel->getAllUsers();
     }
-
+    
     public function registerUser($name, $username, $email, $password, $isAdmin) {
         return $this->createUser($name, $username, $email, password_hash($password,PASSWORD_DEFAULT), $isAdmin);
     }
@@ -38,6 +38,7 @@ class UserController {
     public function loginByEmail($email,$password) {
         $user = $this->userModel->getUserByEmail($email);
         if ($user !== false && password_verify($password, $user['user_hashedPass'])) {
+            session_start();
             $_SESSION["user_id"] = $user['user_ID'];
             return "success";
         } else {
@@ -48,6 +49,7 @@ class UserController {
     public function loginByUsername($username,$password) {
         $user = $this->userModel->getUserByUsername($username);
         if ($user !== false && password_verify($password, $user['user_hashedPass'])) {
+            session_start();
             $_SESSION["user_id"] = $user['user_ID'];
             return "success";
         } else {
@@ -65,5 +67,54 @@ class UserController {
         }
     }
 
+    public function handleRequest() {
+        if (isset($_POST['userAction'])) {
+            if ($_POST['userAction'] === 'login') {
+                unset($_POST['userAction']);
+                $emailOrUsername = $_POST['loginIdentifier'];
+                $password = $_POST['loginPassword'];
+                if (filter_var($emailOrUsername, FILTER_VALIDATE_EMAIL)){
+                    if ($this->loginByEmail($emailOrUsername, $password) === "success") {
+                        header("Location:/../../../home.php");
+                        ob_end_flush();
+                    } else {
+                        header("Location:Views/login/login.php");
+                        ob_end_flush();
+                    }
+                } else {
+                    if ($this->loginByUsername($emailOrUsername,$password) === "success") {
+                        header("Location:/../../../home.php");
+                        ob_end_flush();
+                    } else {
+                        header("Location:Views/login/login.php");
+                        ob_end_flush();
+                    }
+                }
+            } elseif ($_POST['userAction'] === 'createUser') {
+                unset($_POST['userAction']);
+                $userName = $_POST['userName'];
+                $userUsername = $_POST['userUsername'];
+                $userEmail = $_POST['userEmail'];
+                $userPassword = $_POST['userPassword'];
+                $isAdmin = isset($_POST['isAdmin']) ? 1 : 0;
+                $success = $this->registerUser($userName,$userUsername,$userEmail,$userPassword,$isAdmin)['success'];
+                if($success){
+                    header("Location:Views/login/login.php");
+                    ob_end_flush();
+                } else {
+                    header("Location:Views/login/register.php");
+                    ob_end_flush();
+                }
+            } elseif ($_POST['userAction'] === 'logout') {
+                echo "here";
+                $this->logout();
+                header("Location:Views/login/login.php");
+                ob_end_flush();
+            } else {
+                // Handle other actions here, if needed
+            }
+        }
+    }
+
 }
-?>
+?>
\ No newline at end of file
diff --git a/app/Models/Event.php b/app/Models/Event.php
index cebd4d87ae06613905bad1ffb85ed41a1818ffe8..cdfc2e1c9886d62b98451c50efe1465a12648055 100644
--- a/app/Models/Event.php
+++ b/app/Models/Event.php
@@ -5,7 +5,7 @@ require_once(__DIR__ . '/../../util.php');
 
 class EventModel {
 
-    public function createEvent($event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid) {
+    public function createEvent($stock, $event_date, $event_name, $gambar, $event_location, $vid) {
         echo "createEvent method called<br>"; 
         global $db;
     
@@ -39,20 +39,20 @@ class EventModel {
             $vidFilePath = null; // Set to null if no file is uploaded
         }
     
-        $stmt = $db->prepare("INSERT INTO events (event_name, event_stock, event_date, event_details, gambar, event_location, vid) VALUES (?, ?, ?, ?, ?, ?, ?)");
+        $stmt = $db->prepare("INSERT INTO events (event_stock, event_date, event_name, gambar, event_location, vid) VALUES (?, ?, ?, ?, ?, ?)");
     
-        if ($stmt->execute([$event_name, $event_stock, $event_date, $details, $imageFilePath, $event_location, $vidFilePath])) {
+        if ($stmt->execute([$stock, $event_date, $event_name, $imageFilePath, $event_location, $vidFilePath])) {
             echo "Event created successfully";
         } else {
             echo "Error creating event: " . print_r($stmt->errorInfo(), true);
         }
     }
     
-    public function updateEvent($event_id, $event_name, $event_stock, $event_date, $details, $gambar, $event_location, $vid) {
+    public function updateEvent($event_id, $event_stock, $event_date, $event_name, $event_location, $gambar, $vid) {
         global $db;
         $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);
     
-        echo "Updating Event with ID: $event_id, Stock: $event_stock, Event_Date: $event_date, Details: $details";
+        echo "Updating Event with ID: $event_id, Stock: $event_stock, Date: $event_date, Name: $event_name, Location: $event_location";
         
         if ($gambar !== null && isset($gambar['name']) && isset($gambar['tmp_name'])) {
             $imageFilePath = 'assets/images/' . $gambar['name'];
@@ -91,7 +91,7 @@ class EventModel {
         //     $sql = "UPDATE events SET event_name = '$event_name', event_stock = '$event_stock', event_date = '$event_date', event_details = '$details', event_location = '$event_location', vid = '$vid' WHERE event_id = $event_id";
         // }
 
-        $sql = "UPDATE events SET event_name = '$event_name', event_stock = '$event_stock', event_date = '$event_date', event_details = '$details', gambar = '$imageFilePath', event_location = '$event_location', vid = '$vidFilePath' WHERE event_id = $event_id";
+        $sql = "UPDATE events SET event_stock = '$event_stock', event_date = '$event_date', event_name = '$event_name', gambar = '$imageFilePath', event_location = '$event_location', vid = '$vidFilePath' WHERE event_id = $event_id";
     
         $rowCount = $db->exec($sql);
     
@@ -133,10 +133,59 @@ class EventModel {
     
     public function getAllEvents() {
         global $db;
+        $stmt = $db->prepare("SELECT * FROM events");
+        $stmt->execute();
+        return $stmt->fetchAll(PDO::FETCH_ASSOC);
+    }
+
+
+    public function searchEvents($searchQuery, $sortKey, $minStock) {
+    global $db;
+
+    try {
+        $sql = "SELECT * FROM events WHERE 1"; // Start with a true condition
+
+        // Add search condition 
+        if (!empty($searchQuery)) {
+            $sql .= " AND (LOWER(event_name) LIKE :query OR LOWER(event_location) LIKE :query)";
+        }
+
+        // Add filter condition 
+        if ($minStock !== null) {
+            $sql .= " AND event_stock >= :minStock";
+        }
+
+        // Add sort condition
+        if ($sortKey === 'name') {
+            $sql .= " ORDER BY event_name ASC";
+        } elseif ($sortKey === 'location') {
+            $sql .= " ORDER BY event_location ASC";
+        }
+
+        $stmt = $db->prepare($sql);
+
+        // Bind search query parameter
+        if (!empty($searchQuery)) {
+            $lowerSearchQuery = strtolower("%" . $searchQuery . "%");
+            $stmt->bindParam(':query', $lowerSearchQuery, PDO::PARAM_STR);
+        }
+
+        // Bind filter parameter 
+        if ($minStock !== null) {
+            $stmt->bindParam(':minStock', $minStock, PDO::PARAM_INT);
+        }
+
+        $stmt->execute();
 
-        $stmt = $db->query("SELECT * FROM events");
         return $stmt->fetchAll(PDO::FETCH_ASSOC);
+    } catch (PDOException $e) {
+        throw new Exception("Error searching events: " . $e->getMessage());
     }
+}
+
+    
+
+
 }
 ?>
 
diff --git a/app/Models/Pembelian.php b/app/Models/Pembelian.php
index ca374427bb15f86069f658d1542d4bcf9074f868..7abc874b18263729b13ec59bd3d7fb1922797a20 100644
--- a/app/Models/Pembelian.php
+++ b/app/Models/Pembelian.php
@@ -9,9 +9,7 @@ class PembelianModel {
         global $db;
 
         $stmt = $db->prepare("INSERT INTO pembelian (ticket_id, user_id, pembelian_created_time) VALUES (?, ?, ?)");
-        $stmt->execute([$ticketId, $userId, $createdTime]);
-
-        return "Pembelian created successfully";
+        return $stmt->execute([$ticketId, $userId, $createdTime]);
     }
 
     public function getPembelian($pembelianId) {
diff --git a/app/Models/User.php b/app/Models/User.php
index 189678fab36389ab260092117ed12144614a4dca..dc6079a4b7c10bfa084ac52765e656d8039128b0 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -7,20 +7,28 @@ require_once(__DIR__ . '/../../db/connect.php');
 class UserModel {
     public function createUser($name, $username, $email, $hashedPass, $isAdmin) {
         global $db;
+
+        $response = [
+            'success'=> true,
+            'message'=> ''
+        ];
     
         try {
             $stmt = $db->prepare("INSERT INTO users (user_name, username, user_email, user_hashedPass, isAdmin) VALUES (?, ?, ?, ?, ?)");
             $stmt->execute([$name, $username, $email, $hashedPass, $isAdmin]);
-            
-            return "User created successfully";
+            $response['message'] = "User created successfully";
+            return $response;
         } catch (PDOException $e) {
+            $response['success'] = false;
             // Check if the error code corresponds to a unique constraint violation.
             if ($e->getCode() === '23000') {
                 // Handle the error as a duplicate entry.
-                return "Username or email already exists. Please choose a different one.";
+                $response['message'] = "Username or email already exists. Please choose a different one.";
+                return $response;
             } else {
                 // Handle other database errors.
-                return "Database error: " . $e->getMessage();
+                $response['message'] = "Database error: " . $e->getMessage();
+                return $response;
             }
         }
     }
diff --git a/app/View/login.php b/app/Views/login/login.php
similarity index 70%
rename from app/View/login.php
rename to app/Views/login/login.php
index 501ebe110f7c42a0438431b06b935a46e6921a78..6e6b60192a6cc771163e81ea233758d0e5557433 100644
--- a/app/View/login.php
+++ b/app/Views/login/login.php
@@ -5,16 +5,16 @@
         <title>Login • TICKET KU</title>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
-        <link rel="stylesheet" type="text/css" href="../../styles/auth.css">
+        <link rel="stylesheet" type="text/css" href="../../../styles/auth.css">
     </head>
 
     <body>
         <div class="login-container">
             <h1>Login</h1>
-            <form id="loginForm" method="post" action="../../home.php">
+            <form id="loginForm" method="post" action="../../router.php">
                 <!-- Aslinya email atau username bisa(?) -->
-                <label for="email">Email</label>
-                <input type="email" id="email" name="loginEmail" required>
+                <label for="email">Email or Username</label>
+                <input type="text" id="identifier" name="loginIdentifier" required>
                 
                 <label for="password">Password</label>
                 <input type="password" id="password" name="loginPassword" required>
diff --git a/app/View/register.php b/app/Views/login/register.php
similarity index 93%
rename from app/View/register.php
rename to app/Views/login/register.php
index ed6173b0f0440ad83dcf9799e89cff60c219bcd5..d6a5772363a1d4e830ebf3847582ccf5dc43884a 100644
--- a/app/View/register.php
+++ b/app/Views/login/register.php
@@ -5,13 +5,13 @@
         <title>Register • TICKET KU</title>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
-        <link rel="stylesheet" type="text/css" href="../../styles/auth.css">
+        <link rel="stylesheet" type="text/css" href="../../../styles/auth.css">
     </head>
 
     <body>
         <div class="register-container">
             <h1>Register</h1>
-            <form id="registerForm" method="post" action="../../home.php">
+            <form id="registerForm" method="post" action="../../router.php">
                 <label for="userName">Name</label>
                 <input type="text" id="userName" name="userName" required>
 
diff --git a/app/Views/pembelian/pembelian.php b/app/Views/pembelian/pembelian.php
new file mode 100644
index 0000000000000000000000000000000000000000..6e41397fbdae5639a7efbb1491322c4a73efd906
--- /dev/null
+++ b/app/Views/pembelian/pembelian.php
@@ -0,0 +1,46 @@
+<<!-- app/Views/purchase.php -->
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Purchase Ticket</title>
+    <!-- Include any CSS styles or external libraries here -->
+</head>
+<body>
+    <h1>Purchase Ticket</h1>
+    
+    <!-- Display the ticket details -->
+    <h2>Ticket Details</h2>
+    <p>Ticket ID: <?php echo $ticket['ticket_id']; ?></p>
+    <p>Ticket Name: <?php echo $ticket['ticket_name']; ?></p>
+    <p>Price: <?php echo $ticket['ticket_price']; ?></p>
+    
+    <!-- Purchase Form -->
+    <form id="purchaseForm" method="post" action="/app/router.php?purchaseAction=purchaseTicket">
+        <input type="hidden" name="ticketId" value="<?php echo $ticket['ticket_id']; ?>">
+        <input type="hidden" name="userId" value="<?php echo $_SESSION['user_id']; ?>">
+        
+        <!-- Additional form fields or options can be added here -->
+        
+        <button type="button" id="confirmPurchaseBtn">Confirm Purchase</button>
+    </form>
+
+    <!-- JavaScript code for the confirmation dialog -->
+    <script>
+        // Function to show the confirmation dialog
+        function showConfirmationDialog() {
+            if (confirm("Are you sure you want to purchase this ticket?")) {
+                // If the user confirms, submit the form
+                document.getElementById("purchaseForm").submit();
+            }
+        }
+
+        // Attach the confirmation dialog to the button click event
+        document.getElementById("confirmPurchaseBtn").addEventListener("click", showConfirmationDialog);
+    </script>
+    
+    <!-- Include any additional content or messages here -->
+</body>
+</html>
diff --git a/app/router.php b/app/router.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb55957a8cad6d74fe5fcead911d78633fb708b1
--- /dev/null
+++ b/app/router.php
@@ -0,0 +1,24 @@
+<?php
+
+require_once './Controllers/PembelianController.php';
+require_once './Controllers/TicketController.php';
+require_once './Controllers/UserController.php';
+require_once './Controllers/EventController.php';
+
+$eventController = new EventController();
+$pembelianController = new PembelianController();
+$ticketController = new TicketController();
+$userController = new UserController();
+
+if ($_SERVER["REQUEST_METHOD"] == "POST") {
+    if (isset($_POST["eventAction"])) {
+        $eventController->handleRequest();
+    } elseif (isset($_POST["ticketAction"])) {
+        $ticketController->handleRequest();
+    } elseif (isset($_POST["userAction"])) {
+        $userController->handleRequest();
+    } elseif (isset($_GET["purchaseAction"])) {
+        $pembelianController->handleRequest();
+    }
+}
+?>
\ No newline at end of file
diff --git a/db/data.php b/db/data.php
index fb6e8e75334a2449e20f2f8118b5615dbfba081a..910413672b6c7765670ddfe98e9069501d7fc16d 100644
--- a/db/data.php
+++ b/db/data.php
@@ -5,12 +5,12 @@
    if (isset($db)) {
       try {
          $sqlEvent = <<<EOF
-         INSERT INTO events (event_name, event_stock, event_date, event_details, gambar, event_location, vid) VALUES
-         ('Music Concert', 100, '2023-09-30 10:00:00', 'Music Concert', 'assets/images/1.jpg', 'Location1', 'assets/videos/video.mp4'),
-         ('Art Exhibition', 50, '2023-10-05 15:30:00', 'Art Exhibition', 'assets/images/2.png', 'Location2', 'assets/videos/video.mp4'),
-         ('Sports Tournament', 200, '2023-11-12 18:45:00', 'Sports Tournament', 'assets/images/3.jpg', 'Location3', 'assets/videos/video.mp4'),
-         ('Comedy Show', 75, '2023-12-03 20:00:00', 'Comedy Show', 'assets/images/4.jpg', 'Location4', 'assets/videos/video.mp4'),
-         ('Tech Conference', 120, '2024-01-18 14:15:00', 'Tech Conference', 'assets/images/5.jpg', 'Location5', 'assets/videos/video.mp4');         
+            INSERT INTO events (event_stock, event_date, event_name, gambar, event_location, vid) VALUES
+            (100, '2023-09-30 10:00:00', 'Music Concert', 'assets/images/1.jpg', 'jakarta', 'assets/videos/video.mp4'),
+            (50, '2023-10-05 15:30:00', 'Art Exhibition', 'assets/images/2.png', 'prancis', 'assets/videos/video.mp4'),
+            (200, '2023-11-12 18:45:00', 'Sports Tournament', 'assets/images/3.jpg', 'italy', 'assets/videos/video.mp4'),
+            (75, '2023-12-03 20:00:00', 'Comedy Show', 'assets/images/4.jpg', 'jakarta', 'assets/videos/video.mp4'),
+            (120, '2024-01-18 14:15:00', 'Tech Conference', 'assets/images/5.jpg', 'ITB', 'assets/videos/video.mp4');
          EOF;
 
          $sqlTicket = <<<EOF
diff --git a/db/init.sql b/db/init.sql
index 1c99403f8af58801494a16529852e9c76a65bc90..e945f7a31a4445c6fa12556ef53f9e6650bf8ef9 100644
--- a/db/init.sql
+++ b/db/init.sql
@@ -4,10 +4,9 @@ USE tubes1_WBD;
 
 CREATE TABLE IF NOT EXISTS events (
   event_id INT AUTO_INCREMENT PRIMARY KEY,
-  event_name CHAR(255),
   event_stock INT,
   event_date DATETIME,
-  event_details CHAR(255),
+  event_name CHAR(255),
   gambar VARCHAR(255),
   event_location CHAR(255),
   vid VARCHAR(255)
diff --git a/home.php b/home.php
index ba33bbc90daf09a9e6561d866c9ad05c638e85f3..1525b333d14d8070bd7b17b482ef5d6ca441cdae 100644
--- a/home.php
+++ b/home.php
@@ -19,20 +19,19 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
 
     if (isset($_POST['action'])) {
         if ($_POST['action'] === 'createEvent') {
-            $eventName = $_POST['event_name'];
             $eventStock = $_POST['stock'];
             $eventDate = $_POST['event_date'];
-            $eventDetails = $_POST['details'];
+            $eventName = $_POST['name'];
+            $eventLocation = $_POST['location'];
             // $uploadedFilePath = $_POST['gambar'];
-            $eventLocation = $_POST['event_location'];
             // $ = $_POST['vid'];
 
             $imageFilePath = isset($_FILES['gambar']) && $_FILES['gambar']['error'] === 0 ? $_FILES['gambar'] : null; // Check if 'gambar' is set in the files array
             $vidFilePath = isset($_FILES['vid']) && $_FILES['vid']['error'] === 0 ? $_FILES['vid'] : null; // Check if 'vid' is set in the files array
 
             // Check if the values are not empty
-            if (!empty($eventName) && !empty($eventStock) && !empty($eventDate) && !empty($eventDetails) 
-                && !empty($eventLocation) && $imageFilePath !== null && $vidFilePath !== null) {
+            if (!empty($eventName) && !empty($eventStock) && !empty($eventDate) && !empty($eventLocation) 
+                && $imageFilePath !== null && $vidFilePath !== null) {
                 var_dump($_FILES); // Output for debugging purposes
 
                 // // Check for file upload
@@ -46,17 +45,16 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
                 //     move_uploaded_file($uploadedFile['tmp_name'], $uploadedFilePath);
                 // }
 
-                $eventController->createEvent($eventName, $eventStock, $eventDate, $eventDetails, $imageFilePath, $eventLocation, $vidFilePath);
+                $eventController->createEvent($eventStock, $eventDate, $eventName, $imageFilePath, $eventLocation, $vidFilePath);
             } else {
                 echo "Please fill in all the fields for creating an event.";
             }
         } elseif ($_POST['action'] === 'updateEvent') {
             $eventIdUpdate = $_POST['eventIdUpdate'];
-            $eventName = $_POST['event_name'];
             $eventStock = $_POST['eventStock'];
             $eventDate = $_POST['event_date'];
-            $eventDetails = $_POST['eventDetails'];
-            $eventLocation = $_POST['event_location'];
+            $eventName = $_POST['eventName'];
+            $eventLocation = $_POST['eventLocation'];
 
             $imageFilePath = isset($_FILES['gambar']) && $_FILES['gambar']['error'] === 0 ? $_FILES['gambar'] : null; // Check if 'gambar' is set in the files array
             $vidFilePath = isset($_FILES['vid']) && $_FILES['vid']['error'] === 0 ? $_FILES['vid'] : null; // Check if 'vid' is set in the files array
@@ -75,7 +73,7 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
                 //     move_uploaded_file($uploadedFile['tmp_name'], $uploadedFilePath);
                 // }
 
-                $eventController->updateEvent($eventIdUpdate, $eventName, $eventStock, $eventDate, $eventDetails, $imageFilePath, $eventLocation, $vidFilePath);
+                $eventController->updateEvent($eventIdUpdate, $eventStock, $eventDate, $eventName, $imageFilePath, $eventLocation, $vidFilePath);
             } else {
                 echo "Please fill in all the fields for updating an event.";
             }
@@ -115,8 +113,8 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
             $loginEmail = $_POST['loginEmail'];
             $loginPassword = $_POST['loginPassword'];
             echo $userController->loginByEmail($loginEmail,$loginPassword);
-        } elseif ($_POST['userAction'] === 'logout') {
-            echo $userController->logout();
+        // } elseif ($_POST['userAction'] === 'logout') {
+        //     echo $userController->logout();
         }
     }
 }
@@ -152,7 +150,7 @@ $users = $userController->getAllUsers();
             <li><a href="#">History</a></li>
             <!-- Logout Button -->
             <li>
-                <form method="post" action="home.php">
+                <form method="post" action="app/router.php">
                     <button type="submit" name="userAction" value="logout">Logout</button>
                 </form>
             </li>
@@ -168,10 +166,10 @@ $users = $userController->getAllUsers();
         <!-- Create Event -->
         <form method="post" action="home.php" enctype="multipart/form-data">
             <label>Create Event:</label>
-            <input type="text" name="event_name" placeholder="Event Name">
             <input type="text" name="stock" placeholder="Stock">
             <input type="datetime-local" name="event_date">
-            <input type="text" name="details" placeholder="Details">
+            <input type="text" name="name" placeholder="Name">
+            <input type="text" name="location" placeholder="Location">
 
             <!-- Drag-and-drop area for image upload -->
             <div id="drop-area-create">
@@ -179,7 +177,6 @@ $users = $userController->getAllUsers();
                 <input type="file" id="file-input-create" name="gambar" accept="image/*">
             </div>
 
-            <input type="text" name="event_location" placeholder="Event Location">
             <!-- <input type="text" name="vid" placeholder="Video URL"> -->
             <div id="drop-area-create">
                 <p>Drag and drop an video file here or click to select one.</p>
@@ -193,10 +190,10 @@ $users = $userController->getAllUsers();
         <form method="post" action="home.php" enctype="multipart/form-data">
             <label>Update Event:</label>
             <input type="text" name="eventIdUpdate" placeholder="Event ID">
-            <input type="text" name="event_name" placeholder="Event Name">
             <input type="text" name="eventStock" placeholder="Stock">
-            <input type="datetime-local" name="event_date">
-            <input type="text" name="eventDetails" placeholder="Details">
+            <input type="datetime-local" name="event_dateUpdate">
+            <input type="text" name="eventName" placeholder="Name">
+            <input type="text" name="eventLocation" placeholder="Location">
 
             <!-- Drag-and-drop area for image upload -->
             <div id="drop-area-update">
@@ -204,7 +201,6 @@ $users = $userController->getAllUsers();
                 <input type="file" id="file-input-update" name="gambar" accept="image/*">
             </div>
 
-            <input type="text" name="event_location" placeholder="Event Location">
             <!-- <input type="text" name="vid" placeholder="Video URL"> -->
             <div id="drop-area-update">
                 <p>Drag and drop an video file here or click to select one.</p>
diff --git a/index.php b/index.php
index 9da7d6f4676f7b6985eb7a8e264b101653d1c278..be535ae63bde661e79da27d2426504dec13974f1 100644
--- a/index.php
+++ b/index.php
@@ -1,7 +1,17 @@
 <?php
     session_start();
     include './db/connect.php';
-    // include './db/init.php';
+    require_once './app/Controllers/EventController.php';
+
+    $eventController = new EventController();
+
+    // Handle search query
+    $searchQuery = isset($_GET['search']) ? $_GET['search'] : '';
+    $sortKey = isset($_GET['sort']) ? $_GET['sort'] : 'name'; 
+    $minStock = isset($_GET['min_stock']) ? $_GET['min_stock'] : null;
+
+    // Get search results or all events 
+    $searchResults = $eventController->searchEvents($searchQuery, $sortKey, $minStock);
 ?>
 
 <!DOCTYPE html>
@@ -51,35 +61,91 @@
         <div class="events">
             <h2>All Events</h2>
             <ul>
-            <?php
-                require_once './app/Controllers/EventController.php';
-                $eventController = new EventController();
-                // Get all events
-                $allEvents = $eventController->getAllEvents();
-
-                // Loop through events and display details
-                foreach ($allEvents as $event) {
+                <?php
+                    require_once './app/Controllers/EventController.php';
+                    $eventController = new EventController();
+                    $allEvents = $eventController->getAllEvents();
+
+                    foreach ($allEvents as $event) {
+                        echo "<li>";
+                        echo "<strong>Event ID:</strong> " . $event['event_id'] . "<br>";
+                        echo "<strong>Stock:</strong> " . $event['event_stock'] . "<br>";
+                        echo "<strong>Created Time:</strong> " . $event['event_date'] . "<br>";
+                        echo "<strong>Name:</strong> " . $event['event_name'] . "<br>";
+                        echo "<strong>Image:</strong> <img src='" . $event['gambar'] . "' alt='Event Image' width='100'><br>";
+                        echo "<strong>Location:</strong> " . $event['event_location'] . "<br>";
+                        echo "<strong>Video:</strong> <video src='" . $event['vid'] . "' controls width='150'></video><br>";
+                        echo "</li>";
+                    }
+
+                include './db/init.php';
+                ?>
+
+            </ul>
+        </div>
+        <!-- Search Bar with Filter -->
+        <div class="search-bar">
+            <form method="get" action="index.php">
+                <input type="text" name="search" placeholder="Search events..." value="<?= htmlspecialchars($searchQuery) ?>">
+                <?php if (!empty($searchQuery) || !empty($minStock) || !empty($sortKey)) : ?>
+                    <select name="sort">
+                        <option value="" <?= empty($sortKey) ? 'selected' : '' ?>>No Sorting</option>
+                        <option value="name" <?= $sortKey === 'name' ? 'selected' : '' ?>>Sort by Name</option>
+                        <option value="location" <?= $sortKey === 'location' ? 'selected' : '' ?>>Sort by Location</option>
+                    </select>
+                <?php else : ?>
+                    <select name="sort">
+                        <option value="" selected>No Sorting</option>
+                        <option value="name">Sort by Name</option>
+                        <option value="location">Sort by Location</option>
+                    </select>
+                <?php endif; ?>
+                <!-- Change input type to "text" for minimum stock -->
+                <input type="text" name="min_stock" placeholder="Min Stock" value="<?= htmlspecialchars($minStock) ?>">
+                <button type="submit" id="search-button">Search</button>
+            </form>
+        </div>
+
+        <!-- Display Search Results or All Events -->
+        <div class="events">
+            <h2><?= !empty($searchQuery) || !empty($minStock) ? 'Search Results' : 'All Events' ?></h2>
+            <ul>
+                <?php
+                foreach ($searchResults as $event) {
                     echo "<li>";
                     echo "<strong>Event ID:</strong> " . $event['event_id'] . "<br>";
-                    echo "<strong>Event Name:</strong> " . ($event['event_name'] ?? 'N/A') . "<br>";
                     echo "<strong>Stock:</strong> " . $event['event_stock'] . "<br>";
-                    echo "<strong>Date:</strong> " . $event['event_date'] . "<br>";
-                    echo "<strong>Details:</strong> " . $event['event_details'] . "<br>";
+                    echo "<strong>Created Time:</strong> " . $event['event_date'] . "<br>";
+                    echo "<strong>Name:</strong> " . $event['event_name'] . "<br>";
                     echo "<strong>Image:</strong> <img src='" . $event['gambar'] . "' alt='Event Image' width='100'><br>";
-                    echo "<strong>Location:</strong> " . ($event['event_location'] ?? 'N/A') . "<br>";
-                    echo "<strong>Video:</strong> " . ($event['vid'] ? "<video src='" . $event['vid'] . "' controls width='150'></video>" : 'N/A') . "<br>";
+                    echo "<strong>Location:</strong> " . $event['event_location'] . "<br>";
                     echo "</li>";
                 }
-
-                include './db/init.php';
                 ?>
-
             </ul>
         </div>
         <div class="footer">
             &copy; 2023 Ticket Ku. All rights reserved.
         </div>
     </div>
+
+    <script>
+        // disable search button temporarily (DEBOUNCE)
+        function disableSearchButton() {
+            const searchButton = document.getElementById("search-button");
+            searchButton.disabled = true;
+
+            setTimeout(() => {
+                searchButton.disabled = false;
+            }, 1200); // 0.8s delay
+        }
+
+        document.querySelector(".search-bar form").addEventListener("submit", function (e) {
+            e.preventDefault(); 
+            disableSearchButton();
+        });
+    </script>
+
 </body>
 
 </html>