import 'package:flutter/foundation.dart'; import 'package:mileograph_flutter/objects/objects.dart'; import 'package:mileograph_flutter/services/apiService.dart'; // assumes you've moved HomepageStats + submodels to a separate file class DataService extends ChangeNotifier { final ApiService api; DataService({required this.api}); HomepageStats? _homepageStats; HomepageStats? get homepageStats => _homepageStats; List _legs = []; List get legs => _legs; bool _isHomepageLoading = false; bool get isHomepageLoading => _isHomepageLoading; Future fetchHomepageStats() async { _isHomepageLoading = true; notifyListeners(); try { final json = await api.get('/stats/homepage'); _homepageStats = HomepageStats.fromJson(json); } catch (e) { debugPrint('Failed to fetch homepage stats: $e'); _homepageStats = null; } finally { _isHomepageLoading = false; notifyListeners(); } } Future fetchLegs({ int offset = 0, int limit = 100, String sortBy = 'date', int sortDirection = 0, }) async { final query = '?sort_direction=$sortDirection&sort_by=$sortBy&offset=$offset&limit=$limit'; final json = await api.get('/user/legs$query'); if (json is List) { _legs = json.map((e) => Leg.fromJson(e)).toList(); notifyListeners(); } else { throw Exception('Unexpected legs response: $json'); } } void clear() { _homepageStats = null; notifyListeners(); } double getMileageForCurrentYear() { final currentYear = DateTime.now().year; return getMileageForYear(currentYear) ?? 0; } double? getMileageForYear(int year) { return _homepageStats?.yearlyMileage .firstWhere( (entry) => entry.year == year, orElse: () => YearlyMileage(year: null, mileage: 0), ) .mileage ?? 0; } }