"use client"; import { useState } from "react"; import axios from "axios"; import { useRouter } from "next/navigation"; import { Lock, User, Shield } from "lucide-react"; // Tambahan ikon Shield untuk Admin export default function LoginPage() { const router = useRouter(); // State untuk menyimpan input user dan pilihan role const [loginRole, setLoginRole] = useState("user"); // "user" atau "admin" const [nrp, setNrp] = useState(""); const [password, setPassword] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); // Fungsi saat tombol Login ditekan const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(""); try { // Tembak API Backend Golang menggunakan IP Laptop const response = await axios.post("http://172.17.172.17:8080/api/auth/login", { nrp_nip: nrp, password: password, // role_attempt: loginRole // Buka komentar ini jika backend Golang minta parameter role }); const { token, user } = response.data; // 1. Simpan di localStorage (untuk dipakai di axios frontend) localStorage.setItem("token", token); localStorage.setItem("user", JSON.stringify(user)); // 2. Simpan di Cookie agar bisa dibaca oleh middleware.ts Next.js document.cookie = `token=${token}; path=/; max-age=86400; SameSite=Lax`; // Redirect berdasarkan role dari backend DAN pilihan di UI if (user.role === "admin" && loginRole === "admin") { router.push("/admin"); } else if (user.role !== "admin" && loginRole === "user") { router.push("/dashboard"); // Halaman pemesanan kelas biasa } else { // Mencegah user biasa login lewat tab admin, atau sebaliknya setError("Role tidak sesuai dengan tipe akun Anda."); localStorage.clear(); // Bersihkan token yang terlanjur masuk document.cookie = "token=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT"; // Hapus cookie } } catch (err: any) { setError(err.response?.data?.error || "Gagal terhubung ke server"); } finally { setLoading(false); } }; return (
Smart Classroom Booking System