import 'dart:async'; import 'package:flutter_riverpod/flutter_riverpod.dart'; enum ElectricalHealthStatus { normal, lowVoltageWarning, overchargingWarning, chargingSystemAnomaly, disconnected, } class ElectricalTelemetry { final DateTime timestamp; final double batteryVoltage; // Volts (e.g. 12.6V resting, 14.2V charging) final double? chargingCurrent; // Amps (if sensor supported) final ElectricalHealthStatus healthStatus; final String? diagnosticMessage; const ElectricalTelemetry({ required this.timestamp, required this.batteryVoltage, this.chargingCurrent, required this.healthStatus, this.diagnosticMessage, }); bool get isCharging => batteryVoltage >= 13.5; bool get isUnderVoltage => batteryVoltage < 11.8; bool get isOverVoltage => batteryVoltage > 15.2; } abstract class MotorcycleElectricalService { Stream get electricalStream; ElectricalTelemetry? get latestReading; bool get isConnected; Future connectBleSensor(String deviceAddress); Future disconnect(); } /// Production stub / Mock implementation for pre-sensor readiness class MockMotorcycleElectricalService implements MotorcycleElectricalService { final _controller = StreamController.broadcast(); ElectricalTelemetry? _latest; bool _connected = false; @override Stream get electricalStream => _controller.stream; @override ElectricalTelemetry? get latestReading => _latest; @override bool get isConnected => _connected; @override Future connectBleSensor(String deviceAddress) async { _connected = true; _latest = ElectricalTelemetry( timestamp: DateTime.now(), batteryVoltage: 14.2, healthStatus: ElectricalHealthStatus.normal, diagnosticMessage: 'Regulator/Rectifier active (14.2V nominal charging)', ); _controller.add(_latest!); return true; } @override Future disconnect() async { _connected = false; _latest = null; } void dispose() { _controller.close(); } } final motorcycleElectricalServiceProvider = Provider((ref) { return MockMotorcycleElectricalService(); });