import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Badge } from "@/components/ui/badge"; import { User, Phone, Lock, Shield, Leaf, Users } from "lucide-react"; import { useToast } from "@/hooks/use-toast"; import { userStorage, type UserProfile } from "@/lib/userStorage"; import logoImage from "@assets/ChatGPT Image Jun 6, 2025, 02_19_36 PM.png"; interface AuthProps { onLogin: (user: UserProfile) => void; isOpen: boolean; } export default function UserAuth({ onLogin, isOpen }: AuthProps) { const [isLoginMode, setIsLoginMode] = useState(true); const [name, setName] = useState(""); const [phone, setPhone] = useState(""); const [organization, setOrganization] = useState(""); const [role, setRole] = useState('engineer'); const [isLoading, setIsLoading] = useState(false); const [recentUsers, setRecentUsers] = useState([]); const { toast } = useToast(); useEffect(() => { loadRecentUsers(); }, []); const loadRecentUsers = async () => { try { const users = await userStorage.getRecentUsers(); setRecentUsers(users.slice(0, 3)); // Show last 3 users } catch (error) { console.warn('Could not load recent users:', error); } }; const validatePhone = (phoneNumber: string): boolean => { return userStorage.validatePhoneNumber(phoneNumber); }; const handleLogin = async () => { if (!phone.trim()) { toast({ title: "फोन नंबर आवश्यक / Phone Required", description: "कृपया अपना फोन नंबर दर्ज करें / Please enter your phone number", variant: "destructive" }); return; } if (!validatePhone(phone)) { toast({ title: "अमान्य फोन नंबर / Invalid Phone", description: "कृपया 10 अंकों का वैध फोन नंबर दर्ज करें / Please enter a valid 10-digit phone number", variant: "destructive" }); return; } setIsLoading(true); try { // Check if user exists let user = await userStorage.getUserByPhone(phone); if (user && isLoginMode) { // Existing user login const session = userStorage.createSession(user); toast({ title: `स्वागत है ${user.name} / Welcome ${user.name}`, description: "सफलतापूर्वक लॉग इन हो गए / Successfully logged in" }); onLogin(session.user); } else if (!user && !isLoginMode) { // New user registration if (!name.trim()) { toast({ title: "नाम आवश्यक / Name Required", description: "कृपया अपना नाम दर्ज करें / Please enter your name", variant: "destructive" }); setIsLoading(false); return; } const newUser = await userStorage.createUser({ name: name.trim(), phone: phone.trim(), organization: organization.trim() || undefined, role, }); const session = userStorage.createSession(newUser); toast({ title: `खाता बनाया गया / Account Created`, description: `स्वागत है ${newUser.name} / Welcome ${newUser.name}` }); onLogin(session.user); } else if (user && !isLoginMode) { // User exists but trying to register toast({ title: "उपयोगकर्ता मौजूद है / User Exists", description: "यह फोन नंबर पहले से पंजीकृत है / This phone number is already registered", variant: "destructive" }); } else { // User doesn't exist but trying to login toast({ title: "उपयोगकर्ता नहीं मिला / User Not Found", description: "कृपया पहले खाता बनाएं / Please create an account first", variant: "destructive" }); } } catch (error) { toast({ title: "त्रुटि / Error", description: error instanceof Error ? error.message : "कृपया पुनः प्रयास करें / Please try again", variant: "destructive" }); } setIsLoading(false); }; const handleQuickLogin = (user: UserProfile) => { const session = userStorage.createSession(user); onLogin(session.user); }; const getRoleDisplay = (role: UserProfile['role']) => { const roleMap = { engineer: "इंजीनियर / Engineer", student: "छात्र / Student", researcher: "शोधकर्ता / Researcher", government: "सरकारी / Government", farmer: "किसान / Farmer", consultant: "सलाहकार / Consultant" }; return roleMap[role]; }; const getRoleIcon = (role: UserProfile['role']) => { const icons = { engineer: , student: , researcher: , government: , farmer: , consultant: }; return icons[role]; }; return (
Prithvi Guardian AI Logo Prithvi Guardian Ai
पर्यावरण और सिविल इंजीनियरिंग के लिए ऑफलाइन ऐप
Offline Environmental & Civil Engineering App
{/* Recent Users Quick Login */} {recentUsers.length > 0 && (
{recentUsers.map((user) => ( handleQuickLogin(user)} >
{getRoleIcon(user.role)}

{user.name}

{user.phone}

{getRoleDisplay(user.role).split(' / ')[0]}
))}
)} {/* Login/Register Toggle */}
{/* Phone Number Input */}
setPhone(e.target.value)} maxLength={10} />
{/* Name Input (Registration only) */} {!isLoginMode && (
setName(e.target.value)} />
)} {/* Organization Input (Registration only) */} {!isLoginMode && (
setOrganization(e.target.value)} />
)} {/* Role Selection (Registration only) */} {!isLoginMode && (
{[ { key: 'engineer' as const, label: 'इंजीनियर' }, { key: 'student' as const, label: 'छात्र' }, { key: 'researcher' as const, label: 'शोधकर्ता' }, { key: 'government' as const, label: 'सरकारी' }, { key: 'farmer' as const, label: 'किसान' }, { key: 'consultant' as const, label: 'सलाहकार' } ].map(({ key, label }) => ( ))}
)} {/* Submit Button */} {/* Offline Notice */}
पूर्ण ऑफलाइन - कोई डेटा साझा नहीं
Completely Offline - No Data Shared
); }