import React, { useState, useEffect } from 'react'; import { FaUpload, FaFileAlt, FaRoute, FaSignOutAlt, FaUser, FaCreditCard } from 'react-icons/fa'; import axios from 'axios'; interface User { id: number; email: string; companyName: string; subscription: { status: string; plan: string; }; } const Dashboard: React.FC = () => { const [user, setUser] = useState(null); const [permits, setPermits] = useState([]); const [loading, setLoading] = useState(true); const [uploading, setUploading] = useState(false); const [uploadError, setUploadError] = useState(''); const [uploadSuccess, setUploadSuccess] = useState(''); useEffect(() => { loadUserData(); loadPermits(); }, []); const loadUserData = () => { const userData = localStorage.getItem('user'); if (userData) { setUser(JSON.parse(userData)); } }; const loadPermits = async () => { try { const token = localStorage.getItem('token'); const response = await axios.get( `${process.env.REACT_APP_API_URL || (process.env.NODE_ENV === 'production' ? '' : 'http://localhost:5000')}/api/permits`, { headers: { Authorization: `Bearer ${token}` } } ); setPermits(response.data.permits); } catch (error) { console.error('Error loading permits:', error); } finally { setLoading(false); } }; const handleFileUpload = async (event: React.ChangeEvent, state: string) => { const file = event.target.files?.[0]; if (!file) return; setUploading(true); setUploadError(''); setUploadSuccess(''); const formData = new FormData(); formData.append('permit', file); formData.append('state', state); try { const token = localStorage.getItem('token'); const response = await axios.post( `${process.env.REACT_APP_API_URL || (process.env.NODE_ENV === 'production' ? '' : 'http://localhost:5000')}/api/permits/upload`, formData, { headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'multipart/form-data' } } ); setUploadSuccess(`Permit ${response.data.permit.permitNumber} uploaded successfully!`); loadPermits(); // Clear success message after 5 seconds setTimeout(() => setUploadSuccess(''), 5000); } catch (error: any) { setUploadError(error.response?.data?.error?.message || 'Upload failed. Please try again.'); } finally { setUploading(false); // Reset file input event.target.value = ''; } }; const handleLogout = () => { localStorage.removeItem('token'); localStorage.removeItem('user'); window.location.href = '/'; }; if (loading) { return (

Loading dashboard...

); } return (
{/* Navigation */}
{/* Welcome Section */}

Welcome back, {user?.companyName}!

Upload your permit documents to generate compliant routes automatically.

{/* Upload Errors/Success */} {uploadError && (
{uploadError}
)} {uploadSuccess && (
{uploadSuccess}
)} {/* Upload Section */}

Upload Permit Document

{/* Oklahoma Upload */}

Oklahoma Permit

Upload your Oklahoma DOT permit PDF

{/* Texas Upload */}

Texas Permit

Upload your Texas DOT permit PDF

Supported formats: PDF (max 10MB) • Your data is encrypted and secure

{/* Recent Permits */}

Recent Permits

{permits.length === 0 ? (

No permits yet

Upload your first permit document to get started

) : (
{permits.map((permit) => (
window.location.href = `/dashboard/permits/${permit.id}`} >

{permit.permit_number}

{permit.state} • {permit.original_filename}

{permit.origin_location && permit.destination_location && (

{permit.origin_location} → {permit.destination_location}

)}
{permit.status}

{new Date(permit.created_at).toLocaleDateString()}

))}
)}
{/* Stats */}

Total Permits

{permits.length}

Routes Generated

{permits.filter(p => p.origin_location).length}

Subscription

{user?.subscription?.plan || 'None'}

); }; export default Dashboard;