import { useState, useEffect } from 'react'; import { getFeatureFlags, markFeatureViewed, type Feature } from '~/lib/api/features'; const VIEWED_FEATURES_KEY = 'bolt_viewed_features'; const getViewedFeatures = (): string[] => { try { const stored = localStorage.getItem(VIEWED_FEATURES_KEY); return stored ? JSON.parse(stored) : []; } catch { return []; } }; const setViewedFeatures = (featureIds: string[]) => { try { localStorage.setItem(VIEWED_FEATURES_KEY, JSON.stringify(featureIds)); } catch (error) { console.error('Failed to persist viewed features:', error); } }; export const useFeatures = () => { const [hasNewFeatures, setHasNewFeatures] = useState(false); const [unviewedFeatures, setUnviewedFeatures] = useState([]); const [viewedFeatureIds, setViewedFeatureIds] = useState(() => getViewedFeatures()); useEffect(() => { const checkNewFeatures = async () => { try { const features = await getFeatureFlags(); const unviewed = features.filter((feature) => !viewedFeatureIds.includes(feature.id)); setUnviewedFeatures(unviewed); setHasNewFeatures(unviewed.length > 0); } catch (error) { console.error('Failed to check for new features:', error); } }; checkNewFeatures(); }, [viewedFeatureIds]); const acknowledgeFeature = async (featureId: string) => { try { await markFeatureViewed(featureId); const newViewedIds = [...viewedFeatureIds, featureId]; setViewedFeatureIds(newViewedIds); setViewedFeatures(newViewedIds); setUnviewedFeatures((prev) => prev.filter((feature) => feature.id !== featureId)); setHasNewFeatures(unviewedFeatures.length > 1); } catch (error) { console.error('Failed to acknowledge feature:', error); } }; const acknowledgeAllFeatures = async () => { try { await Promise.all(unviewedFeatures.map((feature) => markFeatureViewed(feature.id))); const newViewedIds = [...viewedFeatureIds, ...unviewedFeatures.map((f) => f.id)]; setViewedFeatureIds(newViewedIds); setViewedFeatures(newViewedIds); setUnviewedFeatures([]); setHasNewFeatures(false); } catch (error) { console.error('Failed to acknowledge all features:', error); } }; return { hasNewFeatures, unviewedFeatures, acknowledgeFeature, acknowledgeAllFeatures }; };