import 'package:flutter/foundation.dart'; import '../models/note.dart'; import '../services/note_service.dart'; enum BackupStatus { idle, loading, success, error } class NoteViewModel extends ChangeNotifier { final NoteService _service; NoteViewModel({required NoteService service}) : _service = service; List _notes = []; bool _isLoading = false; String? _error; BackupStatus _backupStatus = BackupStatus.idle; // ── Getters ──────────────────────────────────────────────── List get notes => _notes; bool get isLoading => _isLoading; String? get error => _error; BackupStatus get backupStatus => _backupStatus; // ── Notes CRUD ───────────────────────────────────────────── Future loadNotes() async { _setLoading(true); try { _notes = await _service.getAllNotes(); _error = null; } catch (e) { _error = 'Failed to load notes: $e'; } finally { _setLoading(false); } } Future createNote() async { final note = await _service.createNote(); _notes.insert(0, note); notifyListeners(); return note; } Future updateNote(Note note) async { final updated = await _service.updateNote(note); final index = _notes.indexWhere((n) => n.id == updated.id); if (index != -1) { _notes[index] = updated; notifyListeners(); } } Future deleteNote(String id) async { await _service.deleteNote(id); _notes.removeWhere((n) => n.id == id); notifyListeners(); } // ── Backup ───────────────────────────────────────────────── Future backup() async { _setBackupStatus(BackupStatus.loading); try { await _service.triggerBackup(); _setBackupStatus(BackupStatus.success); } catch (e) { _error = e.toString(); _setBackupStatus(BackupStatus.error); } } Future restore() async { _setBackupStatus(BackupStatus.loading); try { await _service.triggerRestore(); await loadNotes(); _setBackupStatus(BackupStatus.success); } catch (e) { _error = e.toString(); _setBackupStatus(BackupStatus.error); } } // ── Helpers ──────────────────────────────────────────────── void _setLoading(bool value) { _isLoading = value; notifyListeners(); } void _setBackupStatus(BackupStatus status) { _backupStatus = status; notifyListeners(); } }