'use client'; import { useState, useEffect } from 'react'; import { useAuth } from '@/context/AuthContext'; import Login from '@/components/Login'; import LoadingSkeleton from '@/components/LoadingSkeleton'; import BottomNav from '@/components/BottomNav'; import ReminderBanner from '@/components/ReminderBanner'; import DailyEntry from '@/components/DailyEntry'; import CalendarView from '@/components/CalendarView'; import ReflectionsList from '@/components/ReflectionsList'; import ThingsToPrayFor from '@/components/ThingsToPrayFor'; import AboutPage from '@/components/AboutPage'; import HomePage from '@/components/HomePage'; import AnsweredPrayers from '@/components/AnsweredPrayers'; import { db } from '@/lib/firebase'; import { collection, addDoc, getDocs, updateDoc, query, where, doc } from 'firebase/firestore'; import toast from 'react-hot-toast'; interface Prayer { id: string; userId: string; date: string; text: string; prayFor?: string; answered?: boolean; answerDetails?: string; prayFrequency?: number; // 1-7 times per week lastPrayedFor?: string; // ISO date string } export default function Home() { const [activeTab, setActiveTab] = useState<'home' | 'compose' | 'journal' | 'answered' | 'praying' | 'reflections' | 'about'>('home'); const [prayers, setPrayers] = useState([]); const [editingPrayer, setEditingPrayer] = useState(null); // Form state const [date, setDate] = useState(new Date().toISOString().split('T')[0]); const [text, setText] = useState(''); const [prayFor, setPrayFor] = useState(''); const [answered, setAnswered] = useState(false); const [answerDetails, setAnswerDetails] = useState(''); const { user, loading: authLoading } = useAuth(); // Load prayers from Firestore useEffect(() => { if (!user) return; const loadPrayers = async () => { try { const prayersRef = collection(db, 'prayers'); const q = query(prayersRef, where('userId', '==', user.uid)); const querySnapshot = await getDocs(q); const loadedPrayers: Prayer[] = []; querySnapshot.forEach((doc) => { loadedPrayers.push({ id: doc.id, ...doc.data() } as Prayer); }); setPrayers(loadedPrayers); } catch (error) { console.error('Error loading prayers:', error); toast.error('Failed to load prayers'); } }; loadPrayers(); }, [user]); // Load draft from localStorage useEffect(() => { const draft = localStorage.getItem('prayerDraft'); if (draft) { try { const { date: draftDate, text: draftText, prayFor: draftPrayFor } = JSON.parse(draft); setDate(draftDate || new Date().toISOString().split('T')[0]); setText(draftText || ''); setPrayFor(draftPrayFor || ''); } catch (e) { console.error('Error loading draft:', e); } } }, []); // Save draft to localStorage useEffect(() => { localStorage.setItem('prayerDraft', JSON.stringify({ date, text, prayFor })); }, [date, text, prayFor]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!user) { toast.error('Please log in to save prayers'); return; } if (!text.trim()) { toast.error('Please write something'); return; } try { const prayerData: any = { userId: user.uid, date, text, answered, }; // Only add optional fields if they have values if (prayFor) { prayerData.prayFor = prayFor; } if (answerDetails) { prayerData.answerDetails = answerDetails; } if (editingPrayer) { // Update existing prayer await updateDoc(doc(db, 'prayers', editingPrayer.id), prayerData); setPrayers(prev => prev.map(p => (p.id === editingPrayer.id ? { ...p, ...prayerData } : p)) ); toast.success('Prayer updated! 🙏'); setEditingPrayer(null); } else { // Add new prayer const docRef = await addDoc(collection(db, 'prayers'), prayerData); const newPrayer: Prayer = { id: docRef.id, ...prayerData }; setPrayers(prev => [...prev, newPrayer]); toast.success('Prayer saved! 🙏'); } // Reset form setDate(new Date().toISOString().split('T')[0]); setText(''); setPrayFor(''); localStorage.removeItem('prayerDraft'); } catch (error) { console.error('Error saving prayer:', error); toast.error('Failed to save prayer'); } }; const handleSelectPrayer = (prayer: Prayer) => { setEditingPrayer(prayer); setDate(prayer.date); setText(prayer.text); setPrayFor(prayer.prayFor || ''); setAnswered(prayer.answered || false); setAnswerDetails(prayer.answerDetails || ''); setActiveTab('compose'); }; const handleDateClick = (clickedDate: string) => { const dayPrayers = prayers.filter(p => p.date === clickedDate); if (dayPrayers.length > 0) { handleSelectPrayer(dayPrayers[0]); } else { setDate(clickedDate); setActiveTab('home'); } }; const handleMarkPrayed = async (prayerId: string) => { if (!user) return; try { const today = new Date().toISOString().split('T')[0]; await updateDoc(doc(db, 'prayers', prayerId), { lastPrayedFor: today, }); setPrayers(prev => prev.map(p => (p.id === prayerId ? { ...p, lastPrayedFor: today } : p)) ); toast.success('Prayed! 🙏'); } catch (error) { console.error('Error marking prayed:', error); toast.error('Failed to update'); } }; if (authLoading) { return (
🙏

Haver

Preparing your sacred space...

"Be anxious for nothing, but in everything by prayer and supplication, with thanksgiving, let your requests be made known to God."
— Philippians 4:6
); } if (!user) { return ; } return (
{activeTab === 'home' && ( p.date === new Date().toISOString().split('T')[0]).length} onStartPraying={() => setActiveTab('compose')} onSelectPrayer={handleSelectPrayer} userName={user.displayName || user.email || undefined} /> )} {activeTab === 'compose' && ( )} {activeTab === 'journal' && ( )} {activeTab === 'answered' && ( )} {activeTab === 'praying' && ( !p.answered)} onEdit={handleSelectPrayer} onMarkPrayed={handleMarkPrayed} /> )} {activeTab === 'reflections' && ( )} {activeTab === 'about' && }
); }