'use client' import { useState, useEffect } from 'react' import { Moon, Volume2, Sun, Clock, MapPin, Thermometer } from 'lucide-react' import { getCurrentWeather, setWeatherLocation, setLocationHint, getTempUnit, setTempUnit, getTimeFormat, setTimeFormat, type CurrentWeather, type TempUnit, type TimeFormat, } from '@/lib/weatherApi' export function SettingsPage() { const [isDark, setIsDark] = useState(false) const [volume, setVolume] = useState(70) const [brightness, setBrightness] = useState(80) const [timeout, setTimeout_] = useState(5) const [mounted, setMounted] = useState(false) // Weather location state const [currentWeather, setCurrentWeather] = useState(null) const [weatherLoading, setWeatherLoading] = useState(true) const [cityInput, setCityInput] = useState('') const [savingCity, setSavingCity] = useState(false) const [cityError, setCityError] = useState(null) const [citySuccess, setCitySuccess] = useState(false) // Temperature unit state const [tempUnit, setTempUnitState] = useState('F') // Time format state const [timeFormatState, setTimeFormatState] = useState('12h') useEffect(() => { setMounted(true) const isDarkMode = document.documentElement.classList.contains('dark') setIsDark(isDarkMode) // Load temperature unit preference setTempUnitState(getTempUnit()) // Load time format preference setTimeFormatState(getTimeFormat()) // Fetch current weather to show current city getCurrentWeather() .then((data) => setCurrentWeather(data)) .catch(() => {}) .finally(() => setWeatherLoading(false)) }, []) const handleTempUnitChange = (unit: TempUnit) => { setTempUnitState(unit) setTempUnit(unit) } const handleTimeFormatChange = (format: TimeFormat) => { setTimeFormatState(format) setTimeFormat(format) } const toggleTheme = () => { if (document.documentElement.classList.contains('dark')) { document.documentElement.classList.remove('dark') localStorage.setItem('theme', 'light') setIsDark(false) } else { document.documentElement.classList.add('dark') localStorage.setItem('theme', 'dark') setIsDark(true) } } const handleCitySubmit = async (e: React.FormEvent) => { e.preventDefault() if (!cityInput.trim()) return setSavingCity(true) setCityError(null) setCitySuccess(false) try { await setWeatherLocation(cityInput.trim()) setLocationHint(true) const data = await getCurrentWeather() setCurrentWeather(data) setCityInput('') setCitySuccess(true) // Clear success message after 3 seconds setTimeout(() => setCitySuccess(false), 3000) } catch (err) { setCityError(err instanceof Error ? err.message : 'Failed to update location') } finally { setSavingCity(false) } } if (!mounted) return null return (
{/* Header */}

Settings

{/* Settings Content */}
{/* Dark Mode Toggle */}
{isDark ? : }
Dark Mode
{isDark ? 'Enabled' : 'Disabled'}
{/* Volume Control */}
Volume
{volume}%
setVolume(Number(e.target.value))} className="w-full h-2 bg-muted cursor-pointer" />
{/* Brightness Control */}
Brightness
{brightness}%
setBrightness(Number(e.target.value))} className="w-full h-2 bg-muted cursor-pointer" />
{/* Timeout Control */}
Auto-Lock Timeout
{timeout} minutes
{/* Weather Location */}
Weather Location
{weatherLoading ? 'Loading...' : currentWeather?.city || 'Not set'}
setCityInput(e.target.value)} placeholder="Enter new city" disabled={savingCity} className="flex-1 border border-border bg-input text-foreground text-sm px-3 py-1.5" />
{cityError && (
{cityError}
)} {citySuccess && (
Location updated successfully
)}
{/* Temperature Unit */}
Temperature Unit
{tempUnit === 'C' ? 'Celsius' : 'Fahrenheit'}
{/* Time Format */}
Time Format
{timeFormatState === '24h' ? '24-hour' : '12-hour'}
) }