'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import api from '@/lib/api'; export default function LoginPage() { const router = useRouter(); const [email, setEmail] = useState(''); const [inviteCode, setInviteCode] = useState(''); const [showInviteCode, setShowInviteCode] = useState(false); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); // Check if already authenticated useEffect(() => { const checkAuth = async () => { const token = await api.getToken(); if (token) { router.replace('/dashboard'); } }; checkAuth(); }, [router]); const validateEmail = (email: string): boolean => { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); }; const handleContinue = async (e: React.FormEvent) => { e.preventDefault(); setError(null); const trimmedEmail = email.trim().toLowerCase(); // Validate email if (!trimmedEmail) { setError('Email is required'); return; } if (!validateEmail(trimmedEmail)) { setError('Please enter a valid email address'); return; } setIsLoading(true); try { // Check if email exists in database const checkResult = await api.checkEmail(trimmedEmail); // Request OTP code const otpResult = await api.requestOTP(trimmedEmail); if (otpResult.ok) { // Save email for OTP verification page await api.saveEmail(trimmedEmail); // Navigate to OTP verification const params = new URLSearchParams({ email: trimmedEmail, isNewUser: checkResult.ok && checkResult.data?.exists ? '0' : '1', }); if (inviteCode.trim()) { params.set('inviteCode', inviteCode.trim()); } router.push(`/verify-otp?${params.toString()}`); } else { setError(otpResult.error?.message || 'Failed to send verification code. Please try again.'); } } catch { setError('Network error. Please check your connection.'); } finally { setIsLoading(false); } }; return (
{/* Logo */}
W

Welcome to WellNuo

Enter your email to get started

{/* Login Form */}
{/* Email Input */}
setEmail(e.target.value)} className="appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" placeholder="you@example.com" disabled={isLoading} />
{/* Invite Code Toggle */}
{/* Invite Code Input */} {showInviteCode && (
setInviteCode(e.target.value)} className="appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" placeholder="Enter invite code" disabled={isLoading} />
)} {/* Error Message */} {error && (

{error}

)} {/* Submit Button */}
{/* Footer */}
By continuing, you agree to our Terms & Privacy Policy
{/* Additional Info */}

We'll send you a verification code to your email

); }