import 'package:get/get.dart'; import 'package:marco/helpers/services/api_service.dart'; import 'package:marco/helpers/services/app_logger.dart'; import 'package:marco/helpers/widgets/my_snackbar.dart'; import 'package:marco/model/directory/note_list_response_model.dart'; class NotesController extends GetxController { RxList notesList = [].obs; RxBool isLoading = false.obs; RxnString editingNoteId = RxnString(); RxString searchQuery = ''.obs; List get filteredNotesList { if (searchQuery.isEmpty) return notesList; final query = searchQuery.value.toLowerCase(); return notesList.where((note) { return note.note.toLowerCase().contains(query) || note.contactName.toLowerCase().contains(query) || note.organizationName.toLowerCase().contains(query) || note.createdBy.firstName.toLowerCase().contains(query); }).toList(); } @override void onInit() { super.onInit(); fetchNotes(); } Future fetchNotes({int pageSize = 1000, int pageNumber = 1}) async { isLoading.value = true; logSafe( "📤 Fetching directory notes with pageSize=$pageSize & pageNumber=$pageNumber"); try { final response = await ApiService.getDirectoryNotes( pageSize: pageSize, pageNumber: pageNumber); logSafe("💡 Directory Notes Response: $response"); if (response == null) { logSafe("⚠️ Response is null while fetching directory notes"); notesList.clear(); } else { logSafe("💡 Directory Notes Response: $response"); notesList.value = NotePaginationData.fromJson(response).data; } } catch (e, st) { logSafe("💥 Error occurred while fetching directory notes", error: e, stackTrace: st); notesList.clear(); } finally { isLoading.value = false; } } Future updateNote(NoteModel updatedNote) async { try { logSafe( "Attempting to update note. id: ${updatedNote.id}, contactId: ${updatedNote.contactId}"); final oldNote = notesList.firstWhereOrNull((n) => n.id == updatedNote.id); if (oldNote != null && oldNote.note.trim() == updatedNote.note.trim()) { logSafe("No changes detected in note. id: ${updatedNote.id}"); showAppSnackbar( title: "No Changes", message: "No changes were made to the note.", type: SnackbarType.info, ); return; } final success = await ApiService.updateContactComment( updatedNote.id, updatedNote.note, updatedNote.contactId, ); if (success) { logSafe("Note updated successfully. id: ${updatedNote.id}"); final index = notesList.indexWhere((n) => n.id == updatedNote.id); if (index != -1) { notesList[index] = updatedNote; notesList.refresh(); } showAppSnackbar( title: "Success", message: "Note updated successfully.", type: SnackbarType.success, ); } else { showAppSnackbar( title: "Error", message: "Failed to update note.", type: SnackbarType.error, ); } } catch (e, stackTrace) { logSafe("Update note failed: ${e.toString()}"); logSafe("StackTrace: ${stackTrace.toString()}"); showAppSnackbar( title: "Error", message: "Failed to update note.", type: SnackbarType.error, ); } } void addNote(NoteModel note) { notesList.insert(0, note); logSafe("Note added to list"); } void deleteNote(int index) { if (index >= 0 && index < notesList.length) { notesList.removeAt(index); logSafe("Note removed from list at index $index"); } } void clearAllNotes() { notesList.clear(); logSafe("All notes cleared from list"); } }