import 'wiz_provisioning_device.dart'; import 'wiz_provisioning_environment.dart'; import 'wiz_provisioning_failure.dart'; enum WizProvisioningStatus { initial, loadingEnvironment, attentionRequired, ready, provisioning, rescanning, success, failure, unsupported, } class WizRescanSummary { final int found; final int added; final int updated; final int removedOffline; final int pendingRemoval; final int online; const WizRescanSummary({ required this.found, required this.added, required this.updated, required this.removedOffline, required this.pendingRemoval, required this.online, }); factory WizRescanSummary.fromMap(Map raw) { return WizRescanSummary( found: (raw['found'] as num?)?.toInt() ?? 0, added: (raw['added'] as num?)?.toInt() ?? 0, updated: (raw['updated'] as num?)?.toInt() ?? 0, removedOffline: (raw['removed_offline'] as num?)?.toInt() ?? 0, pendingRemoval: (raw['pending_removal'] as num?)?.toInt() ?? 0, online: (raw['online'] as num?)?.toInt() ?? 0, ); } } class WizProvisioningState { final WizProvisioningStatus status; final WizProvisioningEnvironment environment; final String? activeHomeName; final WizProvisioningFailure? failure; final WizRescanSummary? rescanSummary; final List provisionedDevices; final List timeline; final String? notice; const WizProvisioningState({ required this.status, required this.environment, required this.activeHomeName, required this.failure, required this.rescanSummary, required this.provisionedDevices, required this.timeline, required this.notice, }); factory WizProvisioningState.initial() => WizProvisioningState( status: WizProvisioningStatus.initial, environment: WizProvisioningEnvironment.unsupported(), activeHomeName: null, failure: null, rescanSummary: null, provisionedDevices: const [], timeline: const [], notice: null, ); bool get isBusy => status == WizProvisioningStatus.loadingEnvironment || status == WizProvisioningStatus.provisioning || status == WizProvisioningStatus.rescanning; bool get canStart => status == WizProvisioningStatus.ready || status == WizProvisioningStatus.failure || status == WizProvisioningStatus.attentionRequired; WizProvisioningState copyWith({ WizProvisioningStatus? status, WizProvisioningEnvironment? environment, String? activeHomeName, WizProvisioningFailure? failure, bool clearFailure = false, WizRescanSummary? rescanSummary, bool clearRescanSummary = false, List? provisionedDevices, List? timeline, String? notice, bool clearNotice = false, }) { return WizProvisioningState( status: status ?? this.status, environment: environment ?? this.environment, activeHomeName: activeHomeName ?? this.activeHomeName, failure: clearFailure ? null : (failure ?? this.failure), rescanSummary: clearRescanSummary ? null : (rescanSummary ?? this.rescanSummary), provisionedDevices: provisionedDevices ?? this.provisionedDevices, timeline: timeline ?? this.timeline, notice: clearNotice ? null : (notice ?? this.notice), ); } }