import 'package:flutter/foundation.dart'; import 'package:qpay/http/http.dart'; import 'package:qpay/models/uptime_item_model.dart'; enum UptimeStatus { idle, loading, success, error } class UptimeProvider extends ChangeNotifier { final Http _http = Http(); UptimeStatus _status = UptimeStatus.idle; List _items = []; String? _error; UptimeStatus get status => _status; List get items => _items; String? get error => _error; bool get isLoading => _status == UptimeStatus.loading; bool get hasError => _status == UptimeStatus.error; /// Count of services that are currently up (status == true). int get upCount => _items.where((i) => i.status).length; /// Count of services that are currently down (status == false). int get downCount => _items.where((i) => !i.status).length; Future fetchUptimes() async { _status = UptimeStatus.loading; _error = null; notifyListeners(); try { final response = await _http.getRaw( '/public/uptimes?sort=createdAt%2Cdesc', ); if (response.statusCode == 200) { final body = response.data as Map; final content = body['content'] as List; _items = content .map((e) => UptimeItemModel.fromJson(e as Map)) .toList(); _status = UptimeStatus.success; } else { _error = 'Failed to load uptime data (status ${response.statusCode})'; _status = UptimeStatus.error; } } catch (e) { _error = 'Network error: ${e.toString()}'; _status = UptimeStatus.error; } notifyListeners(); } }