import { useEffect, useState } from "react"; import axios from "axios"; import { useNavigate } from "react-router-dom"; import StatsStyling from "../styles/stats_styling"; const API_BASE_URL = import.meta.env.VITE_BACKEND_URL const styles = StatsStyling; const LoginPage = () => { const navigate = useNavigate(); const [isRegisterMode, setIsRegisterMode] = useState(false); const [username, setUsername] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const [info, setInfo] = useState(""); useEffect(() => { const token = localStorage.getItem("access_token"); if (!token) { return; } axios.defaults.headers.common.Authorization = `Bearer ${token}`; axios .get(`${API_BASE_URL}/profile`) .then(() => { navigate("/upload", { replace: true }); }) .catch(() => { localStorage.removeItem("access_token"); delete axios.defaults.headers.common.Authorization; }); }, [navigate]); const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); setError(""); setInfo(""); setLoading(true); try { if (isRegisterMode) { await axios.post(`${API_BASE_URL}/register`, { username, email, password }); setInfo("Account created. You can now sign in."); setIsRegisterMode(false); } else { const response = await axios.post<{ access_token: string }>( `${API_BASE_URL}/login`, { username, password } ); const token = response.data.access_token; localStorage.setItem("access_token", token); axios.defaults.headers.common.Authorization = `Bearer ${token}`; navigate("/upload"); } } catch (requestError: unknown) { if (axios.isAxiosError(requestError)) { setError( String(requestError.response?.data?.error || requestError.message || "Request failed") ); } else { setError("Unexpected error occurred."); } } finally { setLoading(false); } }; return (

{isRegisterMode ? "Create your account" : "Welcome back"}

{isRegisterMode ? "Register to start uploading and exploring your dataset insights." : "Sign in to continue to your analytics workspace."}

setUsername(event.target.value)} required /> {isRegisterMode && ( setEmail(event.target.value)} required /> )} setPassword(event.target.value)} required />
{error && (

{error}

)} {info && (

{info}

)}
{isRegisterMode ? "Already have an account?" : "New here?"}
); }; export default LoginPage;