import AsyncStorage from '@react-native-async-storage/async-storage'; // Storage keys definition const TIMER_KEYS = { REPS: 'timer_reps', WORK_TIME: 'timer_work_time', REST_TIME: 'timer_rest_time' }; // Store interface export interface TimerState { reps: number; workTime: number; restTime: number; } // Default values const DEFAULT_STATE: TimerState = { reps: 1, workTime: 0, restTime: 0 }; // Store management class class TimerStore { // Method to save repetitions async saveReps(reps: number): Promise { try { await AsyncStorage.setItem(TIMER_KEYS.REPS, reps.toString()); } catch (error) { console.error('Error saving repetitions:', error); } } // Method to save work time async saveWorkTime(workTime: number): Promise { try { await AsyncStorage.setItem(TIMER_KEYS.WORK_TIME, workTime.toString()); } catch (error) { console.error('Error saving work time:', error); } } // Method to save rest time async saveRestTime(restTime: number): Promise { try { await AsyncStorage.setItem(TIMER_KEYS.REST_TIME, restTime.toString()); } catch (error) { console.error('Error saving rest time:', error); } } // Method to save complete state async saveState(state: TimerState): Promise { try { await Promise.all([ this.saveReps(state.reps), this.saveWorkTime(state.workTime), this.saveRestTime(state.restTime) ]); } catch (error) { console.error('Error saving state:', error); } } // Method to retrieve repetitions async getReps(): Promise { try { const value = await AsyncStorage.getItem(TIMER_KEYS.REPS); return value !== null ? parseInt(value, 10) : DEFAULT_STATE.reps; } catch (error) { console.error('Error retrieving repetitions:', error); return DEFAULT_STATE.reps; } } // Method to retrieve work time async getWorkTime(): Promise { try { const value = await AsyncStorage.getItem(TIMER_KEYS.WORK_TIME); return value !== null ? parseInt(value, 10) : DEFAULT_STATE.workTime; } catch (error) { console.error('Error retrieving work time:', error); return DEFAULT_STATE.workTime; } } // Method to retrieve rest time async getRestTime(): Promise { try { const value = await AsyncStorage.getItem(TIMER_KEYS.REST_TIME); return value !== null ? parseInt(value, 10) : DEFAULT_STATE.restTime; } catch (error) { console.error('Error retrieving rest time:', error); return DEFAULT_STATE.restTime; } } // Method to retrieve complete state async getState(): Promise { try { const [reps, workTime, restTime] = await Promise.all([ this.getReps(), this.getWorkTime(), this.getRestTime() ]); return { reps, workTime, restTime }; } catch (error) { console.error('Error retrieving state:', error); return DEFAULT_STATE; } } } // Export a singleton instance export const timerStore = new TimerStore();