import React, { useState, useEffect } from 'react'; import { MapPin, Clock, AlertCircle, RefreshCw } from 'lucide-react'; const PrayerTimesWidget = () => { const [location, setLocation] = useState(null); const [prayerTimes, setPrayerTimes] = useState(null); const [currentTime, setCurrentTime] = useState(new Date()); const [nextPrayer, setNextPrayer] = useState(null); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const [showSettings, setShowSettings] = useState(false); const [adjustments, setAdjustments] = useState({ Fajr: 0, Sunrise: 0, Dhuhr: 0, Asr: 0, Maghrib: 0, Isha: 0 }); useEffect(() => { const timer = setInterval(() => setCurrentTime(new Date()), 1000); return () => clearInterval(timer); }, []); useEffect(() => { // Load saved adjustments const saved = localStorage.getItem('prayerAdjustments'); if (saved) { setAdjustments(JSON.parse(saved)); } getLocation(); }, []); const getLocation = () => { setLoading(true); // Use Dhulian coordinates directly const dhalianLoc = { latitude: 33.7694, longitude: 72.4292 }; setLocation(dhalianLoc); fetchPrayerTimes(dhalianLoc); }; const fetchPrayerTimes = async (loc) => { try { const date = new Date(); const url = `https://api.aladhan.com/v1/timings/${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}?latitude=${loc.latitude}&longitude=${loc.longitude}&method=1&school=1`; console.log('Fetching from:', url); console.log('Using: Karachi Method + Hanafi School'); const response = await fetch(url); const data = await response.json(); console.log('Full API Response:', data); if (data.code === 200 && data.data && data.data.timings) { console.log('Prayer Times from API:', data.data.timings); console.log('Asr Time:', data.data.timings.Asr); setPrayerTimes(data.data.timings); setError(`API Asr: ${data.data.timings.Asr}`); setLoading(false); } } catch (err) { console.error('Error:', err); setPrayerTimes({ Fajr: '05:37', Sunrise: '07:05', Dhuhr: '12:15', Asr: '16:00', Maghrib: '17:45', Isha: '19:15' }); setLoading(false); } }; useEffect(() => { if (prayerTimes) { findNextPrayer(); } }, [prayerTimes, currentTime, adjustments]); const adjustTime = (time24, mins) => { if (!time24 || !mins) return time24; const [h, m] = time24.split(':').map(Number); let total = h * 60 + m + mins; if (total >= 1440) total -= 1440; if (total < 0) total += 1440; return `${String(Math.floor(total / 60)).padStart(2, '0')}:${String(total % 60).padStart(2, '0')}`; }; const findNextPrayer = () => { const prayers = ['Fajr', 'Dhuhr', 'Asr', 'Maghrib', 'Isha']; const now = currentTime.getHours() * 60 + currentTime.getMinutes(); for (let prayer of prayers) { const time = adjustTime(prayerTimes[prayer], adjustments[prayer]); const [h, m] = time.split(':').map(Number); const prayerMins = h * 60 + m; if (prayerMins > now) { const diff = prayerMins - now; const hrs = Math.floor(diff / 60); setNextPrayer({ name: prayer, time: time, timeUntil: hrs > 0 ? `${hrs}h ${diff % 60}m` : `${diff}m` }); return; } } const fajrTime = adjustTime(prayerTimes['Fajr'], adjustments['Fajr']); setNextPrayer({ name: 'Fajr', time: fajrTime, timeUntil: 'Tomorrow' }); }; const formatTime = (time24) => { if (!time24) return '--:--'; const [h, m] = time24.split(':'); const hour = parseInt(h); return `${hour % 12 || 12}:${m} ${hour >= 12 ? 'PM' : 'AM'}`; }; const updateAdjustment = (prayer, change) => { const newAdj = { ...adjustments, [prayer]: (adjustments[prayer] || 0) + change }; setAdjustments(newAdj); localStorage.setItem('prayerAdjustments', JSON.stringify(newAdj)); }; const adjustAllPrayers = (minutes) => { const newAdj = { Fajr: (adjustments.Fajr || 0) + minutes, Sunrise: (adjustments.Sunrise || 0) + minutes, Dhuhr: (adjustments.Dhuhr || 0) + minutes, Asr: (adjustments.Asr || 0) + minutes, Maghrib: (adjustments.Maghrib || 0) + minutes, Isha: (adjustments.Isha || 0) + minutes }; setAdjustments(newAdj); localStorage.setItem('prayerAdjustments', JSON.stringify(newAdj)); }; const resetAllAdjustments = () => { const resetAdj = { Fajr: 0, Sunrise: 0, Dhuhr: 0, Asr: 0, Maghrib: 0, Isha: 0 }; setAdjustments(resetAdj); localStorage.setItem('prayerAdjustments', JSON.stringify(resetAdj)); }; const prayers = [ { name: 'Fajr', key: 'Fajr' }, { name: 'Sunrise', key: 'Sunrise' }, { name: 'Dhuhr', key: 'Dhuhr' }, { name: 'Asr', key: 'Asr' }, { name: 'Maghrib', key: 'Maghrib' }, { name: 'Isha', key: 'Isha' } ]; if (loading) { return (
Loading...
Next Prayer
{formatTime(nextPrayer.time)}
in {nextPrayer.timeUntil}
Use quick buttons or adjust each prayer individually
{currentTime.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' })}