'use client'; import { useState, useEffect, useCallback } from 'react'; import { User } from '@/lib/session'; import { getUsageData, getPreferences, savePreferences, saveUsageEntry, shouldShowUsagePrompt, hasOneWeekOfData, calculateWeeklyAverage, generateQuitPlan, setCurrentUserId, UserPreferences, UsageEntry, } from '@/lib/storage'; import { UserHeader } from './UserHeader'; import { SetupWizard } from './SetupWizard'; import { UsagePromptDialog } from './UsagePromptDialog'; import { UsageCalendar } from './UsageCalendar'; import { QuitPlanCard } from './QuitPlanCard'; import { StatsCard } from './StatsCard'; import { Button } from '@/components/ui/button'; import { PlusCircle } from 'lucide-react'; interface DashboardProps { user: User; } export function Dashboard({ user }: DashboardProps) { const [preferences, setPreferences] = useState(null); const [usageData, setUsageData] = useState([]); const [showSetup, setShowSetup] = useState(false); const [showUsagePrompt, setShowUsagePrompt] = useState(false); const [isLoading, setIsLoading] = useState(true); const [refreshKey, setRefreshKey] = useState(0); const loadData = useCallback(() => { // Always pass user.id explicitly to ensure correct data is loaded const prefs = getPreferences(user.id); const usage = getUsageData(user.id); setPreferences(prefs); setUsageData(usage); setRefreshKey(prev => prev + 1); return prefs; }, [user.id]); useEffect(() => { // Set the current user ID for all storage operations setCurrentUserId(user.id); const prefs = loadData(); if (!prefs.hasCompletedSetup) { setShowSetup(true); } else if (shouldShowUsagePrompt()) { setShowUsagePrompt(true); } setIsLoading(false); }, [user.id, loadData]); const handleSetupComplete = (data: { substance: 'nicotine' | 'weed'; name: string; age: number }) => { const today = new Date().toISOString().split('T')[0]; const newPrefs: UserPreferences = { substance: data.substance, trackingStartDate: today, hasCompletedSetup: true, dailyGoal: null, quitPlan: null, userName: data.name, userAge: data.age, }; savePreferences(newPrefs, user.id); setPreferences(newPrefs); setShowSetup(false); setShowUsagePrompt(true); setRefreshKey(prev => prev + 1); }; const handleUsageSubmit = (count: number) => { if (!preferences) { setShowUsagePrompt(false); return; } if (count > 0) { const today = new Date().toISOString().split('T')[0]; saveUsageEntry({ date: today, count, substance: preferences.substance, }, user.id); } setShowUsagePrompt(false); // Reload data and force calendar refresh const usage = getUsageData(user.id); setUsageData(usage); setRefreshKey(prev => prev + 1); }; const handleGeneratePlan = () => { if (!preferences) return; const plan = generateQuitPlan(preferences.substance, user.id); const updatedPrefs = { ...preferences, quitPlan: plan }; savePreferences(updatedPrefs, user.id); setPreferences(updatedPrefs); }; const getDaysTracked = (): number => { if (!preferences?.trackingStartDate) return 0; const startDate = new Date(preferences.trackingStartDate); const today = new Date(); return Math.floor((today.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24)) + 1; }; if (isLoading) { return (
Loading...
); } return (
{preferences && ( <> {/* Floating Log Button */}
)}
{preferences && ( setShowUsagePrompt(false)} onSubmit={handleUsageSubmit} substance={preferences.substance} userId={user.id} /> )}
); }