import React, { useState, useEffect } from 'react';
import './App.css';
import { systemInitializer } from './utils/systemInitializer.js';
import { authManager } from './utils/auth.js';
import LoadingScreen from './components/LoadingScreen';
// Import all your pages
import Dashboard from './pages/Dashboard';
import AquaLens from './pages/AquaLens';
import BiodiversityEar from './pages/BiodiversityEar';
import CarbonOptimizer from './pages/CarbonOptimizer';
import SmartFarming from './pages/SmartFarming';
import EWasteRecycling from './pages/EWasteRecycling';
import AirQuality from './pages/AirQuality';
import FloraShield from './pages/FloraShield';
import FoodWasteReduction from './pages/FoodWasteReduction';
import EnvironmentalJustice from './pages/EnvironmentalJustice';
import EcoSonification from './pages/EcoSonification';
import PhantomFootprint from './pages/PhantomFootprint';
import UpcyclingAgent from './pages/UpcyclingAgent';
import PackagingDesigner from './pages/PackagingDesigner';
import Impact from './pages/Impact';
import EcoTasks from './pages/EcoTasks';
import Learn from './pages/Learn';
import Startups from './pages/Startups';
import Community from './pages/Community';
import Profile from './pages/Profile';
import Login from './pages/Login';
import DigitalQuarry from './pages/DigitalQuarry';
import BioStreamAI from './pages/BioStreamAI';
import EWasteProspector from './pages/EWasteProspector';
import GeneticResilience from './pages/GeneticResilience';
function App() {
const [activePage, setActivePage] = useState('Dashboard');
const [userStats, setUserStats] = useState({
carbonSaved: 0,
waterTests: 0,
biodiversityScans: 0,
treesPlanted: 0,
wasteReduced: 0,
energySaved: 0
});
const [currentUser, setCurrentUser] = useState(null);
const [systemReady, setSystemReady] = useState(false);
const [systemStatus, setSystemStatus] = useState(null);
const [isLoading, setIsLoading] = useState(true);
// Initialize advanced systems and authentication on app start
useEffect(() => {
const initializeSystems = async () => {
console.log('🚀 GreenPlus by GXS: Initializing Advanced Environmental Systems...');
try {
const status = await systemInitializer.initialize();
setSystemStatus(status);
setSystemReady(status.overallReady);
// Initialize authentication
const user = authManager.getCurrentUser();
setCurrentUser(user);
if (status.overallReady) {
console.log('✅ GreenPlus by GXS: All systems operational!');
} else {
console.warn('⚠️ GreenPlus by GXS: Running with limited functionality');
}
} catch (error) {
console.error('❌ GreenPlus by GXS: System initialization failed:', error);
setSystemReady(false);
}
};
initializeSystems();
// Show loading screen for 2.5 seconds
const loadingTimer = setTimeout(() => {
setIsLoading(false);
}, 2500);
return () => clearTimeout(loadingTimer);
}, []);
// Handle authentication changes
const handleAuthChange = (user) => {
setCurrentUser(user);
updateUserStats();
};
// Update user stats from auth manager
const updateUserStats = () => {
const stats = authManager.getUserStats();
// Only show demo stats for actual guest users, not logged-in users
const isGuest = currentUser?.isGuest === true;
const isNewGuest = isGuest && !stats.carbonSaved && !stats.waterTests && !stats.biodiversityScans;
console.log('🔄 App.js updateUserStats called');
console.log('📊 Raw stats from authManager:', stats);
console.log('👤 Current user:', currentUser);
console.log('🆕 Is new guest:', isNewGuest);
const newStats = {
carbonSaved: stats.carbonSaved || (isNewGuest ? 12 : 0),
waterTests: stats.waterTests || (isNewGuest ? 3 : 0),
biodiversityScans: stats.biodiversityScans || (isNewGuest ? 2 : 0),
treesPlanted: stats.treesPlanted || 0,
wasteReduced: stats.wasteReduced || 0,
energySaved: stats.energySaved || 0
};
console.log('📈 Setting userStats to:', newStats);
setUserStats(newStats);
};
// Set up periodic stats refresh
useEffect(() => {
// Initial stats load
updateUserStats();
// Refresh stats every 10 seconds (less frequent to reduce flickering)
const statsInterval = setInterval(updateUserStats, 10000);
return () => clearInterval(statsInterval);
}, [currentUser]);
const pages = [
{
id: 'Dashboard',
name: 'Dashboard',
icon: '🏠',
component: Dashboard,
description: 'Overview & Analytics'
},
{
id: 'AquaLens',
name: 'AquaLens',
icon: '💧',
component: AquaLens,
description: 'Water Quality Analysis'
},
{
id: 'BiodiversityEar',
name: 'BiodiversityEar',
icon: '🦜',
component: BiodiversityEar,
description: 'Ecosystem Monitoring'
},
{
id: 'CarbonOptimizer',
name: 'Carbon Optimizer',
icon: '🌱',
component: CarbonOptimizer,
description: 'Carbon Footprint Tracking'
},
{
id: 'SmartFarming',
name: 'Smart Farming',
icon: '🌾',
component: SmartFarming,
description: 'Agricultural Intelligence'
},
{
id: 'EWasteRecycling',
name: 'E-Waste Recycling',
icon: '♻️',
component: EWasteRecycling,
description: 'Electronic Waste Management'
},
{
id: 'AirQuality',
name: 'Air Quality',
icon: '🌬️',
component: AirQuality,
description: 'Air Pollution Monitoring'
},
{
id: 'FloraShield',
name: 'FloraShield',
icon: '🛡️',
component: FloraShield,
description: 'Plant Disease Detection'
},
{
id: 'FoodWasteReduction',
name: 'Food Waste Reduction',
icon: '🍎',
component: FoodWasteReduction,
description: 'Food Rescue Network'
},
{
id: 'EnvironmentalJustice',
name: 'Environmental Justice',
icon: '⚖️',
component: EnvironmentalJustice,
description: 'Equity & Justice'
},
{
id: 'EcoSonification',
name: 'EcoSonification',
icon: '🎵',
component: EcoSonification,
description: 'Environmental Sound Art'
},
{
id: 'PhantomFootprint',
name: 'Phantom Footprint',
icon: '👻',
component: PhantomFootprint,
description: 'Hidden Impact Tracker'
},
{
id: 'UpcyclingAgent',
name: 'Upcycling Agent',
icon: '🔄',
component: UpcyclingAgent,
description: 'Creative Reuse Assistant'
},
{
id: 'PackagingDesigner',
name: 'Packaging Designer',
icon: '📦',
component: PackagingDesigner,
description: 'Sustainable Packaging'
},
{
id: 'DigitalQuarry',
name: 'Digital Quarry',
icon: '🏗️',
component: DigitalQuarry,
description: 'Construction Waste Marketplace'
},
{
id: 'BioStreamAI',
name: 'Bio-Stream AI',
icon: '🧬',
component: BioStreamAI,
description: 'Environmental DNA Analysis'
},
{
id: 'EWasteProspector',
name: 'E-Waste Prospector',
icon: '⚡',
component: EWasteProspector,
description: 'Critical Mineral Recovery'
},
{
id: 'GeneticResilience',
name: 'Genetic Resilience',
icon: '🌾',
component: GeneticResilience,
description: 'Climate Crop Analysis'
},
{
id: 'Impact',
name: 'Global Impact',
icon: '🌍',
component: Impact,
description: 'Environmental Impact Data'
},
{
id: 'EcoTasks',
name: 'Eco Tasks',
icon: '✅',
component: EcoTasks,
description: 'Daily Green Actions'
},
{
id: 'Learn',
name: 'Learn',
icon: '📚',
component: Learn,
description: 'Environmental Education'
},
{
id: 'Startups',
name: 'Green Startups',
icon: '🚀',
component: Startups,
description: 'Sustainable Innovation'
},
{
id: 'Community',
name: 'Community',
icon: '👥',
component: Community,
description: 'Connect with eco champions'
},
{
id: 'Profile',
name: 'My Profile',
icon: '👤',
component: Profile,
description: 'View your environmental impact'
},
{
id: 'Login',
name: 'Login',
icon: '🔑',
component: Login,
description: 'Sign in or create account'
}
];
// Initialize page from URL on app load
useEffect(() => {
const urlParams = new URLSearchParams(window.location.search);
const pageFromUrl = urlParams.get('page');
if (pageFromUrl && pages.some(page => page.id === pageFromUrl)) {
setActivePage(pageFromUrl);
} else {
// If no valid page in URL, set default and update URL
const defaultPage = 'Dashboard';
setActivePage(defaultPage);
updateURL(defaultPage);
}
}, []);
// Function to update URL without page reload
const updateURL = (pageId) => {
const newUrl = `${window.location.pathname}?page=${pageId}`;
window.history.pushState({ page: pageId }, '', newUrl);
};
// Handle browser back/forward buttons
useEffect(() => {
const handlePopState = (event) => {
const urlParams = new URLSearchParams(window.location.search);
const pageFromUrl = urlParams.get('page') || 'Dashboard';
if (pages.some(page => page.id === pageFromUrl)) {
setActivePage(pageFromUrl);
}
};
window.addEventListener('popstate', handlePopState);
return () => window.removeEventListener('popstate', handlePopState);
}, []);
const currentPage = pages.find(page => page.id === activePage);
const CurrentComponent = currentPage?.component || Dashboard;
const handlePageChange = (pageId) => {
setActivePage(pageId);
updateURL(pageId);
};
// Handle activity completion to update stats immediately
const handleActivityComplete = async (activity) => {
console.log('🎯 App.js handleActivityComplete called with:', activity);
// Log activity through auth manager if activity data is provided
if (activity && activity.type) {
console.log('📝 Logging activity through authManager...');
await authManager.logActivity(activity.description || 'Environmental action', {
type: activity.type,
amount: activity.amount,
points: activity.points || 10
});
console.log('✅ Activity logged successfully');
}
// Update stats display
console.log('🔄 Calling updateUserStats after activity completion...');
updateUserStats();
};
// Show loading screen first
if (isLoading) {
return
Environmental Intelligence Platform
{currentPage?.description}