MotorSignal-App/lib/services/entitlements/feature_access_service.dart

68 lines
2.3 KiB
Dart

import 'entitlement_state.dart';
/// Strongly typed identifiers for all capabilities that can be gated or regulated.
enum MotorSignalFeature {
cloudBackup,
unlimitedCloudHistory,
multiDeviceRestore,
advancedTelemetry,
advancedAcceleration,
advancedBraking,
advancedLean,
advancedAnalytics,
unlimitedHistory,
csvExport,
pdfExport,
useMultipleMotorcycles,
planTrips,
createGroupRides,
useAdvancedGroupRideFeatures,
}
/// Centralized domain service determining access to MotorSignal features.
/// UI and background operations check [canAccess] rather than inspecting raw plan or store fields.
class FeatureAccessService {
final EntitlementState _state;
const FeatureAccessService(this._state);
/// Current underlying entitlement state.
EntitlementState get state => _state;
/// Returns true if the requested [feature] is permitted under current entitlement.
bool canAccess(MotorSignalFeature feature) {
switch (feature) {
case MotorSignalFeature.cloudBackup:
return _state.canCloudBackup;
case MotorSignalFeature.unlimitedCloudHistory:
return _state.canUnlimitedCloudHistory;
case MotorSignalFeature.multiDeviceRestore:
return _state.canMultiDeviceRestore;
case MotorSignalFeature.advancedTelemetry:
return _state.canAdvancedTelemetry;
case MotorSignalFeature.advancedAcceleration:
return _state.canAdvancedAcceleration;
case MotorSignalFeature.advancedBraking:
return _state.canAdvancedBraking;
case MotorSignalFeature.advancedLean:
return _state.canAdvancedLean;
case MotorSignalFeature.advancedAnalytics:
return _state.canAdvancedAnalytics;
case MotorSignalFeature.unlimitedHistory:
return _state.canUnlimitedHistory;
case MotorSignalFeature.csvExport:
return _state.canExportCsv;
case MotorSignalFeature.pdfExport:
return _state.canExportPdf;
case MotorSignalFeature.useMultipleMotorcycles:
return _state.canUseMultipleMotorcycles;
case MotorSignalFeature.planTrips:
return _state.canPlanTrips;
case MotorSignalFeature.createGroupRides:
return _state.canCreateGroupRides;
case MotorSignalFeature.useAdvancedGroupRideFeatures:
return _state.canUseAdvancedGroupRideFeatures;
}
}
}