// lib/entry/entry_controller.dart import 'package:get/get.dart'; import 'package:rogapp/model/entry.dart'; import 'package:rogapp/model/event.dart'; import 'package:rogapp/model/team.dart'; import 'package:rogapp/model/category.dart'; import 'package:rogapp/services/api_service.dart'; class EntryController extends GetxController { late final ApiService _apiService; final entries = [].obs; final events = [].obs; final teams = [].obs; final categories = [].obs; final selectedEvent = Rx(null); final selectedTeam = Rx(null); final selectedCategory = Rx(null); final selectedDate = Rx(null); final currentEntry = Rx(null); @override void onInit() async{ super.onInit(); await Get.putAsync(() => ApiService().init()); _apiService = Get.find(); try { await Future.wait([ fetchEntries(), fetchEvents(), fetchTeams(), fetchCategories(), ]); if (Get.arguments != null && Get.arguments['entry'] != null) { currentEntry.value = Get.arguments['entry']; _initializeEntryData(); } Get.putAsync(() => ApiService().init()); }catch(e){ print('Error initializing data: $e'); } } void _initializeEntryData() { if (currentEntry.value != null) { selectedEvent.value = currentEntry.value!.event; selectedTeam.value = currentEntry.value!.team; selectedCategory.value = currentEntry.value!.category; selectedDate.value = currentEntry.value!.date; } } Future fetchEntries() async { try { final fetchedEntries = await _apiService.getEntries(); entries.assignAll(fetchedEntries); } catch (e) { print('Error fetching entries: $e'); } } Future fetchEvents() async { try { final fetchedEvents = await _apiService.getEvents(); events.assignAll(fetchedEvents); } catch (e) { print('Error fetching events: $e'); } } Future fetchTeams() async { try { final fetchedTeams = await _apiService.getTeams(); teams.assignAll(fetchedTeams); } catch (e) { print('Error fetching teams: $e'); } } Future fetchCategories() async { try { final fetchedCategories = await _apiService.getCategories(); categories.assignAll(fetchedCategories); } catch (e) { print('Error fetching categories: $e'); } } Future createEntry() async { if (selectedEvent.value == null || selectedTeam.value == null || selectedCategory.value == null || selectedDate.value == null) { Get.snackbar('Error', 'Please fill all fields'); return; } try { final newEntry = await _apiService.createEntry( selectedTeam.value!.id, selectedEvent.value!.id, selectedCategory.value!.id, selectedDate.value!, ); entries.add(newEntry); Get.back(); } catch (e) { print('Error creating entry: $e'); Get.snackbar('Error', 'Failed to create entry'); } } Future updateEntry() async { if (currentEntry.value == null) return; try { final updatedEntry = await _apiService.updateEntry( currentEntry.value!.id, selectedEvent.value!.id, selectedCategory.value!.id, selectedDate.value!, ); final index = entries.indexWhere((entry) => entry.id == updatedEntry.id); if (index != -1) { entries[index] = updatedEntry; } Get.back(); } catch (e) { print('Error updating entry: $e'); Get.snackbar('Error', 'Failed to update entry'); } } Future deleteEntry() async { if (currentEntry.value == null) return; try { await _apiService.deleteEntry(currentEntry.value!.id); entries.removeWhere((entry) => entry.id == currentEntry.value!.id); Get.back(); } catch (e) { print('Error deleting entry: $e'); Get.snackbar('Error', 'Failed to delete entry'); } } void updateEvent(Event? value) => selectedEvent.value = value; void updateTeam(Team? value) => selectedTeam.value = value; void updateCategory(NewCategory? value) => selectedCategory.value = value; void updateDate(DateTime value) => selectedDate.value = value; bool isOwner() { // Implement logic to check if the current user is the owner of the entry return true; // Placeholder } }