'use client'; import React, { useState } from 'react'; import Link from 'next/link'; import { User, Phone, Mail, CreditCard, Lock, AlertCircle, CheckCircle, Shield, ArrowRight } from 'lucide-react'; export default function RegisterPage() { const [formData, setFormData] = useState({ fullName: '', phone: '', email: '', idType: 'ghana_card', idNumber: '', password: '', confirmPassword: '', agreeToTerms: false }); const [errors, setErrors] = useState>({}); const [isSubmitting, setIsSubmitting] = useState(false); const [submitSuccess, setSubmitSuccess] = useState(false); const validateForm = () => { const newErrors: Record = {}; // Name validation if (formData.fullName.trim().length < 3) { newErrors.fullName = "Full name must be at least 3 characters"; } // Ghanaian Phone validation (10 digits starting with 0) const phoneRegex = /^0[2345]\d{8}$/; if (!phoneRegex.test(formData.phone)) { newErrors.phone = "Enter a valid 10-digit Ghanaian mobile number (e.g., 024XXXXXXX)"; } // Email validation (optional but good for recovery) const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (formData.email && !emailRegex.test(formData.email)) { newErrors.email = "Please enter a valid email address"; } // ID validation if (formData.idNumber.trim().length < 6) { newErrors.idNumber = "Please enter a valid ID number"; } if (formData.idType === 'ghana_card' && !/^GHA-\d{9}-\d$/.test(formData.idNumber)) { newErrors.idNumber = "Ghana Card format should be GHA-XXXXXXXXX-X"; } // Password validation if (formData.password.length < 8) { newErrors.password = "Password must be at least 8 characters long"; } if (formData.password !== formData.confirmPassword) { newErrors.confirmPassword = "Passwords do not match"; } // Terms validation if (!formData.agreeToTerms) { newErrors.agreeToTerms = "You must agree to the Terms and Conditions"; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleInputChange = (e: React.ChangeEvent) => { const { name, value, type } = e.target; const val = type === 'checkbox' ? (e.target as HTMLInputElement).checked : value; setFormData(prev => ({ ...prev, [name]: val })); // Clear error when user starts typing if (errors[name]) { setErrors(prev => ({ ...prev, [name]: '' })); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (validateForm()) { setIsSubmitting(true); // Simulate API call - In production, this data goes directly to your PHP backend // Ensure the payload strictly matches formData with no arbitrary values appended try { await new Promise(resolve => setTimeout(resolve, 1500)); setSubmitSuccess(true); } catch (error) { setErrors({ submit: "Registration failed. Please try again." }); } finally { setIsSubmitting(false); } } }; if (submitSuccess) { return (

Account Created!

Your SwiftKash account has been successfully registered. You can now log in to apply for your first loan.

Proceed to Login
); } return (
{/* Left Column - Form */}
SwiftKash

Create an Account

Fill in your details to start applying for loans.

{errors.submit && (

{errors.submit}

)}
{/* Full Name */}
{errors.fullName &&

{errors.fullName}

}
{/* Phone Number */}
{errors.phone &&

{errors.phone}

}
{/* Email (Optional) */}
{errors.email &&

{errors.email}

}
{/* ID Details */}
{errors.idNumber &&

{errors.idNumber}

}
{/* Passwords */}
{errors.password &&

{errors.password}

}
{errors.confirmPassword &&

{errors.confirmPassword}

}
{/* Terms Checkbox */}
{errors.agreeToTerms &&

{errors.agreeToTerms}

}
{/* Submit Button */}

Already have an account? Log in here

{/* Right Column - Value Prop & Trust */}
{/* Background Pattern/Image Overlay */}

Fast access to funds when it matters most.

Secure & Private

Your personal and financial data is encrypted and handled with the highest security standards.

Clear Requirements

Only request the exact loan amount you need. We process exactly what you submit.

); }