import 'package:hive_flutter/hive_flutter.dart'; import '../models/task_model.dart'; import '../models/alarm_model.dart'; import '../models/mind_map_model.dart'; import '../models/calendar_event_model.dart'; class LocalStorageService { static const String _tasksBoxName = 'tasks'; static const String _alarmsBoxName = 'alarms'; static const String _mindMapsBoxName = 'mindMaps'; static const String _eventsBoxName = 'events'; static const String _settingsBoxName = 'settings'; late Box _tasksBox; late Box _alarmsBox; late Box _mindMapsBox; late Box _eventsBox; late Box _settingsBox; Future initialize() async { await Hive.initFlutter(); _tasksBox = await Hive.openBox(_tasksBoxName); _alarmsBox = await Hive.openBox(_alarmsBoxName); _mindMapsBox = await Hive.openBox(_mindMapsBoxName); _eventsBox = await Hive.openBox(_eventsBoxName); _settingsBox = await Hive.openBox(_settingsBoxName); } // Tasks Future saveTask(TaskModel task) async { await _tasksBox.put(task.id, task.toMap()); // Используем toMap() для Hive } Future saveTasks(List tasks) async { for (final task in tasks) { await _tasksBox.put(task.id, task.toMap()); } } List getTasks() { return _tasksBox.values.map((data) { return TaskModel.fromFirestore( _createMockDocument(data as Map), ); }).toList(); } Future deleteTask(String taskId) async { await _tasksBox.delete(taskId); } // Alarms Future saveAlarm(AlarmModel alarm) async { await _alarmsBox.put(alarm.id, alarm.toFirestore()); } List getAlarms() { return _alarmsBox.values.map((data) { return AlarmModel.fromFirestore( _createMockDocument(data as Map), ); }).toList(); } Future deleteAlarm(String alarmId) async { await _alarmsBox.delete(alarmId); } // Mind Maps Future saveMindMapNodes(List nodes) async { for (final node in nodes) { await _mindMapsBox.put(node.id, node.toFirestore()); } } List getMindMapNodes() { return _mindMapsBox.values.map((data) { return MindMapNode.fromFirestore( _createMockDocument(data as Map), ); }).toList(); } // Events Future saveEvent(CalendarEventModel event) async { await _eventsBox.put(event.id, event.toFirestore()); } List getEvents() { return _eventsBox.values.map((data) { return CalendarEventModel.fromFirestore( _createMockDocument(data as Map), ); }).toList(); } // Settings Future saveSetting(String key, Object? value) async { await _settingsBox.put(key, value); } T? getSetting(String key, {T? defaultValue}) { return _settingsBox.get(key, defaultValue: defaultValue) as T?; } // Clear all local data Future clearAll() async { await _tasksBox.clear(); await _alarmsBox.clear(); await _mindMapsBox.clear(); await _eventsBox.clear(); await _settingsBox.clear(); } // Sync with Firebase (merge remote and local) Future syncWithRemote(List remoteTasks) async { final localTasks = getTasks(); final localMap = {for (var t in localTasks) t.id: t}; final remoteMap = {for (var t in remoteTasks) t.id: t}; // Merge: remote takes precedence final merged = {...localMap, ...remoteMap}; await _tasksBox.clear(); for (final task in merged.values) { await _tasksBox.put(task.id, task.toFirestore()); } } // Helper method to create mock DocumentSnapshot dynamic _createMockDocument(Map data) { // Простая эмуляция для конвертации return data; } } final localStorageService = LocalStorageService();