"use client"
import React, {useCallback, useEffect, useState} from 'react'
import Image from 'next/image'
import {motion} from 'framer-motion'
import {Button} from "@/components/ui/button"
import {Input} from "@/components/ui/input"
import {Label} from "@/components/ui/label"
import {Card, CardContent} from "@/components/ui/card"
import {EyeIcon, EyeOffIcon} from 'lucide-react'
import {useToast} from "@/hooks/use-toast"
import {ToastActionElement} from "@/components/ui/toast";
import {useUser} from "@/contexts/user";
import {useRouter} from "next/navigation";
import {useTheme} from "next-themes";
import Register from "@/app/auth/login/register";
import Login from "@/app/auth/login/login";
export default function AuthPage() {
const {checkAuth} = useUser();
const {theme, systemTheme} = useTheme()
const {toast} = useToast();
const [mounted, setMounted] = useState(false);
const [isLogin, setIsLogin] = useState(true);
const [showPassword, setShowPassword] = useState(false);
const [isSubmitting, setIsSubmitting] = useState(false);
const router = useRouter();
const check = useCallback(async () => {
const isAuthenticated = await checkAuth("Called on Login page");
if (isAuthenticated) {
router.replace('/');
} else {
setMounted(true);
}
}, [checkAuth, router, setMounted])
useEffect(() => {
check().then(() => {
console.log("Login page check finished")
})
}, []);
if (!mounted) {
return
{/* Optional: Add a loading spinner or skeleton here */}
;
}
const getTheme = () => {
if (theme === "system") {
switch (systemTheme) {
case "dark":
return "dark"
default:
return "light"
}
}
return theme === "dark" ? "dark" : "light"
}
const logoSrc = getTheme() === 'dark' ? '/logos/logo-light.png' : '/logos/logo.png';
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setIsSubmitting(true);
const username = (document.getElementById('username') as HTMLInputElement).value;
const password = (document.getElementById('password') as HTMLInputElement).value;
let response: {
code: number;
message: string;
action?: ToastActionElement | undefined;
}
if (!isLogin) {
response = await Register(username, password);
} else {
response = await Login(username, password);
}
if (response.code !== 200) {
const msg = response.message
try {
const parsed = JSON.parse(msg);
let desc = parsed.name;
switch (desc) {
case "AuthWeakPasswordError": {
desc = "Password too weak, please try again.";
break;
}
default: {
desc = "An unknown error occurred";
}
}
toast({
title: "Error",
description: desc,
variant: "destructive",
duration: 5000
});
} catch (e) {
// If msg isn't valid JSON, show the raw message
toast({
title: "Error",
description: msg,
variant: "destructive",
duration: 5000
});
}
} else {
toast({
title: "Success",
description: response.message,
variant: "default",
duration: 5000, // Increased duration for better visibility
});
window.location.href = "/";
}
setTimeout(() => {
setIsSubmitting(false);
}, 2000)
};
return (
Silent Whisper
Trust the shadows. Whisper safely.
{isLogin ? "Sign In" : "Sign Up"}
)
}