'use client'; import { useState } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000'; export default function RegisterPage() { const router = useRouter(); const [isStudent, setIsStudent] = useState(true); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(''); const [formData, setFormData] = useState({ name: '', email: '', password: '', confirmPassword: '', }); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); setError(''); // Clear error when user types }; const handleRoleChange = (student: boolean) => { setIsStudent(student); setError(''); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); setIsLoading(true); // Validation if (!formData.name.trim()) { setError('Please enter your full name'); setIsLoading(false); return; } if (!formData.email.trim()) { setError('Please enter your email'); setIsLoading(false); return; } if (formData.password.length < 6) { setError('Password must be at least 6 characters'); setIsLoading(false); return; } if (formData.password !== formData.confirmPassword) { setError('Passwords do not match'); setIsLoading(false); return; } try { // Try to register via API let user; let token; try { const response = await fetch(`${API_URL}/auth/register`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: formData.name, email: formData.email, password: formData.password, role: isStudent ? 'student' : 'teacher', }), }); if (response.ok) { const data = await response.json(); user = data.user; token = data.token; localStorage.setItem('learnflow_token', token); } else if (response.status === 400) { const data = await response.json(); setError(data.detail || 'Registration failed'); setIsLoading(false); return; } else { throw new Error('API not available'); } } catch (apiError) { // Fallback to localStorage console.log('Using localStorage fallback for registration'); user = { id: Date.now().toString(), name: formData.name, email: formData.email, role: isStudent ? 'student' : 'teacher', createdAt: new Date().toISOString(), }; const existingUsers = JSON.parse(localStorage.getItem('learnflow_users') || '[]'); if (existingUsers.find((u: any) => u.email === formData.email)) { setError('An account with this email already exists'); setIsLoading(false); return; } existingUsers.push({ ...user, password: formData.password }); localStorage.setItem('learnflow_users', JSON.stringify(existingUsers)); } // Set current user session localStorage.setItem('learnflow_current_user', JSON.stringify(user)); // Redirect based on role if (isStudent) { router.push('/student/dashboard'); } else { router.push('/teacher/dashboard'); } } catch (err) { setError('Something went wrong. Please try again.'); setIsLoading(false); } }; return (
{/* Header */}
LF
LearnFlow Back to Home
{/* Decorative elements */}

Create Account

Join our learning community today

{/* Error Message */} {error && (
{error}
)}
{/* Role Selection */}

Already have an account?{' '} Sign in

); }