import { useState } from 'react' import { cn } from '@/lib/utils' interface NotifPrefs { daily: boolean streak: boolean weekly: boolean leaderboard: boolean } const STORAGE_KEY = 'settings_notifications' const TIME_KEY = 'settings_notif_time' const DEFAULT_PREFS: NotifPrefs = { daily: true, streak: true, weekly: false, leaderboard: true } function loadPrefs(): NotifPrefs { try { return { ...DEFAULT_PREFS, ...JSON.parse(localStorage.getItem(STORAGE_KEY) ?? '{}') } } catch { return DEFAULT_PREFS } } interface ToggleProps { checked: boolean onChange: (v: boolean) => void } function Toggle({ checked, onChange }: ToggleProps) { return ( onChange(!checked)} className={cn( 'relative w-11 h-6 rounded-full transition-colors flex-shrink-0', checked ? 'bg-blue-600' : 'bg-slate-200', )} > ) } export function NotificationsCard() { const [prefs, setPrefs] = useState(loadPrefs) const [time, setTime] = useState(() => localStorage.getItem(TIME_KEY) ?? '20:00') function toggle(key: keyof NotifPrefs) { const next = { ...prefs, [key]: !prefs[key] } setPrefs(next) localStorage.setItem(STORAGE_KEY, JSON.stringify(next)) } function saveTime(v: string) { setTime(v) localStorage.setItem(TIME_KEY, v) } const items: { key: keyof NotifPrefs; label: string; desc: string }[] = [ { key: 'daily', label: 'Nhắc nhở hàng ngày', desc: 'Tùy chỉnh thời gian học mỗi ngày' }, { key: 'streak', label: 'Cảnh báo chuỗi học tập', desc: 'Không bao giờ bỏ lỡ Streak của bạn' }, { key: 'weekly', label: 'Nhắc nhở mục tiêu tuần', desc: 'Theo dõi tiến độ học tập hàng tuần' }, { key: 'leaderboard', label: 'Cập nhật bảng xếp hạng', desc: 'Biết ngay khi ai đó vượt qua bạn' }, ] return ( notifications_active Cài đặt thông báo {items.map((item) => ( {item.label} {item.desc} {item.key === 'daily' && prefs.daily && ( schedule saveTime(e.target.value)} className="bg-transparent outline-none text-xs font-semibold w-16" /> )} toggle(item.key)} /> ))} ) }
{item.label}
{item.desc}