import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:tm_app/core/utils/result.dart'; import 'package:tm_app/data/repositories/your_tenders_repository.dart'; import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart'; class YourTendersViewModel with ChangeNotifier { final YourTendersRepository yourTendersRepository; YourTendersViewModel({required this.yourTendersRepository}); bool isLoading = false; String? errorMessage; TenderApprovalsResponse? data; // Filter States DateTimeRange? selectedDateRange; String selectedStatus = 'All'; final _fmt = DateFormat('yyyy/MM/dd'); String get startDateFormatted => selectedDateRange?.start != null ? _fmt.format(selectedDateRange!.start) : 'YYYY/MM/DD'; String get endDateFormatted => selectedDateRange?.end != null ? _fmt.format(selectedDateRange!.end) : 'YYYY/MM/DD'; int get startDateUnix => selectedDateRange?.start != null ? selectedDateRange!.start.millisecondsSinceEpoch ~/ 1000 : 0; int get endDateUnix => selectedDateRange?.end != null ? selectedDateRange!.end.millisecondsSinceEpoch ~/ 1000 : 0; Future getApprovedTenders() async { isLoading = true; notifyListeners(); final result = await yourTendersRepository.getApprovedTenders(); switch (result) { case Ok(): data = result.value; errorMessage = null; break; case Error(): errorMessage = result.error.toString(); break; } isLoading = false; notifyListeners(); } Future getTenders({ required int limit, required int offset, required String createdFrom, required String createdTo, }) async { isLoading = true; notifyListeners(); final result = await yourTendersRepository.getTenders( limit: limit, offset: offset, createdFrom: createdFrom, createdTo: createdTo, ); switch (result) { case Ok(): data = result.value; errorMessage = null; break; case Error(): errorMessage = result.error.toString(); break; } isLoading = false; notifyListeners(); } // --- Filter Actions --- void setDateRange(DateTimeRange? range) { selectedDateRange = range; notifyListeners(); } void setStatus(String status) { selectedStatus = status; notifyListeners(); } void clearFilter() { selectedDateRange = null; selectedStatus = 'All'; notifyListeners(); } Future callWithFilter() async { if (selectedStatus == 'All') { await getTenders( limit: 10, offset: 0, createdFrom: startDateUnix.toString(), createdTo: endDateUnix.toString(), ); } else if (selectedStatus == 'Tenders submitted') { await getApprovedTenders(); } } }