'use client'; import React, { useState } from 'react'; import Link from 'next/link'; import { motion } from 'framer-motion'; import { User, Shield, ArrowRight, Activity } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { AuthProvider, useAuth } from '@/lib/auth'; export default function LandingPageWrap() { return ( ); } function LandingPage() { const router = useRouter(); const { login } = useAuth(); const [role, setRole] = useState<'coach' | 'client' | null>(null); const [userId, setUserId] = useState(''); const [status, setStatus] = useState(''); const [isLoading, setIsLoading] = useState(false); // Registration State const [isRegistering, setIsRegistering] = useState(false); const [regName, setRegName] = useState(''); const [regRole, setRegRole] = useState<'COACH' | 'CLIENT' | null>(null); const [generatedUser, setGeneratedUser] = useState(null); const handleRegister = async (e: React.FormEvent) => { e.preventDefault(); if (!regName || !regRole) return; setIsLoading(true); setStatus('Creating Account...'); try { const res = await fetch('/api/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: regName, role: regRole }) }); if (res.ok) { const newUser = await res.json(); setGeneratedUser(newUser); setStatus('Account Created!'); } else { setStatus('Registration Failed'); } } catch (err) { setStatus('Error connecting to server'); } finally { setIsLoading(false); } }; const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); if (!role || !userId) return; setIsLoading(true); setStatus('Validating credentials...'); try { const user = await login(userId); if (user) { // Role Validation if (role === 'coach') { if (user.role !== 'COACH') { setStatus('Access Denied: You are not a Coach'); setIsLoading(false); return; } setStatus('Authenticated. Redirecting...'); router.push('/coach/dashboard'); } else { if (user.role !== 'CLIENT') { setStatus('Access Denied: You are not a Client'); setIsLoading(false); return; } setStatus('Authenticated. Redirecting...'); router.push('/client'); } } else { setStatus('Invalid User ID'); setIsLoading(false); } } catch (err) { setStatus('Connection Error'); setIsLoading(false); } }; return ( {/* Decorative Background Elements */} {/* Logo / Header */} STRAPS-R Strength Training Pose Recognition and Patient Rehabilitation {/* Login / Register Card */} {/* Mode Toggle */} { setIsRegistering(false); setGeneratedUser(null); setStatus(''); }} className={`px-6 py-2 rounded-full text-sm font-bold transition-all ${!isRegistering ? 'bg-white shadow text-zinc-900' : 'text-zinc-500'}`} > LOGIN { setIsRegistering(true); setGeneratedUser(null); setStatus(''); }} className={`px-6 py-2 rounded-full text-sm font-bold transition-all ${isRegistering ? 'bg-white shadow text-zinc-900' : 'text-zinc-500'}`} > REGISTER {isRegistering ? ( generatedUser ? ( Welcome, {generatedUser.name}! Your account has been created. Your Unique User ID {generatedUser.id} Please save this ID. You will need it to login. { setIsRegistering(false); setRole(generatedUser.role === 'COACH' ? 'coach' : 'client'); setUserId(generatedUser.id.toString()); setGeneratedUser(null); }} className="w-full py-4 bg-zinc-900 text-white rounded-xl font-bold tracking-widest uppercase hover:bg-black transition-all" > Go to Login ) : ( Full Name setRegName(e.target.value)} className="w-full bg-zinc-50 border border-zinc-200 rounded-xl px-4 py-3 text-lg focus:outline-none focus:border-zinc-400 transition-colors text-zinc-900" /> Role setRegRole('COACH')} className={`p-3 rounded-xl border-2 transition-all flex flex-col items-center gap-2 ${ regRole === 'COACH' ? 'border-primary bg-blue-50 text-primary' : 'border-zinc-100 bg-zinc-50 text-zinc-400' }`} > COACH setRegRole('CLIENT')} className={`p-3 rounded-xl border-2 transition-all flex flex-col items-center gap-2 ${ regRole === 'CLIENT' ? 'border-emerald-500 bg-emerald-50 text-emerald-600' : 'border-zinc-100 bg-zinc-50 text-zinc-400' }`} > CLIENT {isLoading ? 'Creating...' : 'Create Account'} ) ) : ( <> {/* Role Selection */} setRole('coach')} className={`p-4 rounded-xl border-2 transition-all flex flex-col items-center gap-3 ${ role === 'coach' ? 'border-primary bg-blue-50/50 text-primary shadow-sm' : 'border-zinc-100 bg-zinc-50 text-zinc-400 hover:border-zinc-200 hover:bg-zinc-100' }`} > Coach setRole('client')} className={`p-4 rounded-xl border-2 transition-all flex flex-col items-center gap-3 ${ role === 'client' ? 'border-emerald-500 bg-emerald-50/50 text-emerald-600 shadow-sm' : 'border-zinc-100 bg-zinc-50 text-zinc-400 hover:border-zinc-200 hover:bg-zinc-100' }`} > Client {/* Login Form */} {role === 'coach' ? 'Coach Identifier' : 'Client Identifier'} setUserId(e.target.value)} className="w-full bg-zinc-50 border border-zinc-200 rounded-xl px-4 py-4 text-lg text-center tracking-widest focus:outline-none focus:border-zinc-400 transition-colors disabled:opacity-50 disabled:cursor-not-allowed text-zinc-900 placeholder:text-zinc-300 font-mono" /> {status && {status}} {isLoading ? ( ) : ( <> Enter Platform > )} > )} {/* Active Status Indicator */} SECURE ACCESS • v2.0.4 ); }
Strength Training Pose Recognition and Patient Rehabilitation
Your account has been created.
Your Unique User ID
{generatedUser.id}
Please save this ID. You will need it to login.
{status}
SECURE ACCESS • v2.0.4