import 'package:get/get.dart'; import '../../../core/network/dio_client.dart'; import '../../../core/utils/logger.dart'; class InvoicesController extends GetxController { var invoices = >[].obs; var isLoading = true.obs; var filterStatus = 'all'.obs; var searchQuery = ''.obs; var isSearching = false.obs; @override void onInit() { super.onInit(); loadInvoices(); } List> get filteredInvoices { var list = invoices.toList(); if (filterStatus.value != 'all') { list = list.where((inv) => inv['status'] == filterStatus.value).toList(); } if (searchQuery.value.isNotEmpty) { final q = searchQuery.value.toLowerCase(); list = list.where((inv) { final name = (inv['supplier_name'] ?? '').toString().toLowerCase(); final num = (inv['invoice_number'] ?? '').toString().toLowerCase(); return name.contains(q) || num.contains(q); }).toList(); } return list; } void toggleSearch() { isSearching.value = !isSearching.value; if (!isSearching.value) searchQuery.value = ''; } Future loadInvoices() async { try { isLoading.value = true; final res = await DioClient().client.get('invoices'); if (res.data['success'] == true && res.data['data'] != null) { invoices.value = List>.from(res.data['data']); } } catch (e) { AppLogger.error('Failed to load invoices', e); } finally { isLoading.value = false; } } }