import { FontAwesome, FontAwesome5, MaterialCommunityIcons } from '@expo/vector-icons'; import AsyncStorage from '@react-native-async-storage/async-storage'; export type ProgramActivity = { time: string; title: string; description: string; iconSet: 'FontAwesome' | 'FontAwesome5' | 'MaterialCommunityIcons'; iconName: React.ComponentProps['name'] | React.ComponentProps['name'] | React.ComponentProps['name']; transport?: string; }; export type ProgramActivities = { [date: string]: ProgramActivity[]; }; export type ProgramData = { activities: ProgramActivities; isStale: boolean; }; const PROGRAMS_URL = 'http://kepilhyzmat.com/assets/programs.json'; const PROGRAMS_CACHE_KEY = 'program_activities_cache'; export const getPrograms = async (): Promise => { try { const response = await fetch(PROGRAMS_URL); if (!response.ok) { throw new Error(`Request failed with status ${response.status}`); } const data: ProgramActivities = await response.json(); await AsyncStorage.setItem(PROGRAMS_CACHE_KEY, JSON.stringify(data)); return { activities: data, isStale: false }; } catch (error) { console.error('Failed to fetch programs:', error); const cachedData = await AsyncStorage.getItem(PROGRAMS_CACHE_KEY); if (cachedData) { return { activities: JSON.parse(cachedData), isStale: true }; } throw new Error('Failed to fetch programs and no cache available.'); } };