import 'package:syncrow_app/features/devices/model/function_model.dart'; import 'package:syncrow_app/features/scene/enum/ac_values.dart'; import 'package:syncrow_app/features/scene/enum/create_scene_enum.dart'; import 'package:syncrow_app/features/scene/enum/operation_dialog_type.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/ac_functions.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/door_lock_functions.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/gateway_functions.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/human_presence_functions.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/one_gang_functions.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/presence_sensor.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/three_gang_functions.dart'; import 'package:syncrow_app/features/scene/helper/functions_per_device/tow_gang_helper_functions.dart'; import 'package:syncrow_app/features/scene/model/scene_details_model.dart'; import 'package:syncrow_app/features/scene/model/scene_static_function.dart'; import 'package:syncrow_app/generated/assets.dart'; import 'package:syncrow_app/utils/resource_manager/constants.dart'; mixin SceneOperationsDataHelper { final Map, String, String, dynamic, bool)> _functionMap = { DeviceType.LightBulb: lightBulbFunctions, DeviceType.CeilingSensor: ceilingSensorFunctions, DeviceType.WallSensor: wallSensorFunctions, DeviceType.AC: acFunctions, DeviceType.DoorLock: doorLockFunctions, DeviceType.Curtain: curtainFunctions, DeviceType.ThreeGang: threeGangFunctions, DeviceType.Gateway: gatewayFunctions, DeviceType.OneGang: oneGangFunctions, DeviceType.TwoGang: towGangFunctions, }; final Map _titleMap = { DeviceType.LightBulb: 'Light Bulb Functions', DeviceType.CeilingSensor: 'Presence Sensor Functions', DeviceType.WallSensor: 'Human Presence Sensor Functions', DeviceType.AC: 'AC Functions', DeviceType.DoorLock: 'Door Lock Functions', DeviceType.Curtain: 'Curtain Functions', DeviceType.ThreeGang: '3G Light Switch Functions', DeviceType.Gateway: 'Gateway Functions', DeviceType.OneGang: '1G Light Switch Conditions', DeviceType.TwoGang: '2G Light Switch Conditions', }; //one gang functions static List oneGangFunctions( List functions, String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { if (isAutomation) { return OneGangHelperFunctions.oneGangAutomationFunctions( deviceId, deviceName, functionValue); } return OneGangHelperFunctions.oneGangHelperFunctions( deviceId, deviceName, functionValue); } static List towGangFunctions( List functions, String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { if (isAutomation) { return TowGangHelperFunctions.towGangAutomationFunctions( deviceId, deviceName, functionValue); } return TowGangHelperFunctions.towGangHelperFunctions( deviceId, deviceName, functionValue); } List getFunctionsWithIcons({ DeviceType? type, required List functions, required String deviceId, required String deviceName, required bool isAutomation, }) { final functionValue = null; return _functionMap[type]?.call( functions, deviceId, deviceName, functionValue, isAutomation) ?? lightBulbFunctions( functions, deviceId, deviceName, functionValue, isAutomation); } String getTitle({DeviceType? type}) { return _titleMap[type] ?? ''; } static List ceilingSensorFunctions( List functions, String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { if (isAutomation) { return PresenceSensorHelperFunctions.automationPresenceSensorFunctions( deviceId, deviceName, functionValue); } return PresenceSensorHelperFunctions.tabToRunPresenceSensorFunctions( deviceId, deviceName, functionValue); } static List curtainFunctions( List functions, String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { return []; } static List doorLockFunctions( List functions, String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { if (isAutomation) { return DoorLockHelperFunctions.doorLockAutomationFunctions( deviceId, deviceName, functionValue); } return DoorLockHelperFunctions.doorLockTapToRunFunctions( deviceId, deviceName, functionValue); } static List wallSensorFunctions( List functions, String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { if (isAutomation) { return HumanPresenceHelperFunctions.automationHumanPresenceFunctions( deviceId, deviceName, functionValue); } return HumanPresenceHelperFunctions.tabToRunHumanPresenceFunctions( deviceId, deviceName, functionValue); } static List lightBulbFunctions( List functions, String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { return []; } static List gatewayFunctions( List functions, String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { return GatewayHelperFunctions.tabToRunGatewayFunctions( deviceId, deviceName, functionValue); } static List threeGangFunctions( List functions, String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { if (isAutomation) { return ThreeGangHelperFunctions.threeGangAutomationFunctions( deviceId, deviceName, functionValue); } return ThreeGangHelperFunctions.threeGangHelperFunctions( deviceId, deviceName, functionValue); } static List acFunctions( List functions, String deviceId, String deviceName, dynamic functionValue, bool isAutomation) { if (isAutomation) { return ACFunctionsHelper.automationAcFunctions( deviceId, deviceName, functionValue); } return ACFunctionsHelper.tabToRunAcFunctions( deviceId, deviceName, functionValue); } List getTaskListFunctionsFromApi({ required List actions, required bool isAutomation, List? conditions, }) { List functions = []; // Handle actions for (var action in actions) { if (action.entityId == 'delay') { functions.add( SceneStaticFunction( deviceId: action.entityId, deviceName: 'delay', deviceIcon: Assets.delay, icon: Assets.delay, operationName: 'delay', operationDialogType: OperationDialogType.delay, functionValue: action.executorProperty?.delaySeconds, code: '', operationalValues: [ SceneOperationalValue( icon: '', description: "", value: action.executorProperty?.delaySeconds, ), ], ), ); } else if (action.name != null && action.type != null) { // Handle smart scenes functions.add( SceneStaticFunction( deviceId: action.entityId, deviceName: action.name.toString(), deviceIcon: action.type == 'automation' ? Assets.player : Assets.handClickIcon, icon: action.type == 'automation' ? Assets.player : Assets.handClickIcon, operationName: action.type.toString(), operationDialogType: OperationDialogType.onOff, functionValue: action.actionExecutor, code: CreateSceneEnum.smartSceneSelect.name, operationalValues: [ SceneOperationalValue( icon: Assets.assetsAcPower, description: "Enable", value: 'rule_enable', ), SceneOperationalValue( icon: Assets.assetsAcPowerOFF, description: "Disable", value: 'rule_disable', ), ], ), ); } else { functions .add(_mapExecutorPropertyToSceneFunction(action, isAutomation)); } } // Handle conditions if (conditions != null) { for (var condition in conditions) { // Create a dummy Action from Condition to reuse _mapExecutorPropertyToSceneFunction Action dummyAction = Action( deviceName: condition.deviceName, productType: condition.productType, actionExecutor: 'device_report', entityId: condition.entityId, executorProperty: ExecutorProperty( functionCode: condition.expr.statusCode, functionValue: condition.expr.statusValue, ), ); var conditionFunction = _mapExecutorPropertyToSceneFunction( dummyAction, isAutomation, comparator: condition.expr.comparator, ); functions.add(conditionFunction); } } return functions; } SceneStaticFunction _mapExecutorPropertyToSceneFunction( Action action, bool isAutomation, { String? comparator, String? uniqueCustomId, }) { final executorProperty = action.executorProperty; final Map functionMap = { 'sensitivity': _createSensitivityFunction, 'normal_open_switch': _createNormalOpenSwitchFunction, 'unlock_fingerprint': _createUnlockFingerprintFunction, 'unlock_password': _createUnlockPasswordFunction, 'unlock_card': _createUnlockCardFunction, 'alarm_lock': _createAlarmLockFunction, 'unlock_request': _createUnlockRequestFunction, 'residual_electricity': _createResidualElectricityFunction, 'reverse_lock': _createReverseLockFunction, 'unlock_app': _createUnlockAppFunction, 'hijack': _createHijackFunction, 'doorbell': _createDoorbellFunction, 'unlock_temporary': _createUnlockTemporaryFunction, 'far_detection': _createFarDetectionFunction, 'motion_sensitivity_value': _createMotionSensitivityFunction, 'motionless_sensitivity': _createMotionlessSensitivityFunction, 'indicator': _createIndicatorFunction, 'presence_time': _createPresenceTimeFunction, 'presence_state': _createPresenceStateFunction, 'dis_current': _createDisCurrentFunction, 'illuminance_value': _createIlluminanceValueFunction, 'checking_result': _createCheckingResultFunction, 'switch': _createSwitchFunction, 'temp_set': _createTempSetFunction, 'temp_current': _createTempCurrentFunction, 'mode': _createModeFunction, 'level': _createLevelFunction, 'child_lock': _createChildLockFunction, 'switch_1': _createSwitch1Function, 'switch_2': _createSwitch2Function, 'switch_3': _createSwitch3Function, 'countdown_1': _createCountdown1Function, 'countdown_2': _createCountdown2Function, 'countdown_3': _createCountdown3Function, 'switch_alarm_sound': _createSwitchAlarmSoundFunction, 'master_state': _createMasterStateFunction, 'factory_reset': _createFactoryResetFunction, }; final functionCode = executorProperty?.functionCode ?? ''; final createFunction = functionMap[functionCode]; if (createFunction != null) { return createFunction(action, isAutomation, comparator, uniqueCustomId); } else { throw ArgumentError('Unsupported function code: $functionCode'); } } SceneStaticFunction _createSceneFunction( Action action, String deviceName, String icon, String operationName, OperationDialogType operationDialogType, List operationalValues, bool isAutomation, [ String? comparator, String? uniqueCustomId, ]) { final functionValue = action.executorProperty?.functionValue; return SceneStaticFunction( uniqueCustomId: uniqueCustomId, deviceId: action.entityId, deviceName: deviceName, deviceIcon: icon, icon: icon, operationName: operationName, functionValue: functionValue, code: action.executorProperty?.functionCode ?? '', operationDialogType: operationDialogType, operationalValues: operationalValues, comparator: comparator ?? '==', ); } SceneStaticFunction _createSensitivityFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsSensors, 'Sensitivity', isAutomation ? OperationDialogType.integerSteps : OperationDialogType.listOfOptions, isAutomation ? _createIntegerStepsOptions() : _createSensitivityOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createNormalOpenSwitchFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Set Door lock Normal Open', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } List _createIntegerStepsOptions() { return [ SceneOperationalValue( icon: '', value: 0.0, description: "CM", minValue: 1, maxValue: 600, stepValue: 1, ), ]; } List _createSensitivityOptions() { return List.generate( 10, (index) => SceneOperationalValue( icon: Assets.assetsSensitivityOperationIcon, value: index + 1, description: (index + 1).toString(), ), ); } List _createOnOffOptions() { return [ SceneOperationalValue( icon: Assets.assetsAcPower, description: "ON", value: true, ), SceneOperationalValue( icon: Assets.assetsAcPowerOFF, description: "OFF", value: false, ), ]; } SceneStaticFunction _createUnlockFingerprintFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Fingerprint Unlock', OperationDialogType.integerSteps, _createFingerprintUnlockOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createUnlockPasswordFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Password Unlock', OperationDialogType.integerSteps, _createPasswordUnlockOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createUnlockCardFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Card Unlock', OperationDialogType.integerSteps, _createCardUnlockOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createAlarmLockFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Lock Alarm', OperationDialogType.listOfOptions, _createLockAlarmOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createUnlockRequestFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Remote Unlock Request', OperationDialogType.integerSteps, _createUnlockRequestOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createResidualElectricityFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Residual Electricity', OperationDialogType.integerSteps, _createResidualElectricityOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createReverseLockFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Double Lock', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createUnlockAppFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Remote Unlock Via App', OperationDialogType.integerSteps, _createUnlockAppOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createHijackFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Hijack Alarm', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createDoorbellFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Doorbell', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createUnlockTemporaryFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsDoorLock, 'Temporary Password Unlock', OperationDialogType.integerSteps, _createTemporaryPasswordUnlockOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createFarDetectionFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsSensors, 'Far Detection', OperationDialogType.listOfOptions, _createFarDetectionOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createMotionSensitivityFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsSensors, 'Motion Detection Sensitivity', OperationDialogType.listOfOptions, _createSensitivityOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createMotionlessSensitivityFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsSensors, 'Motionless Detection Sensitivity', OperationDialogType.listOfOptions, _createSensitivityOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createIndicatorFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsSensors, 'Indicator', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createPresenceTimeFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsSensors, 'Nobody Time', OperationDialogType.countdown, _createCountdownOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createPresenceStateFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsSensors, 'Presence State', OperationDialogType.listOfOptions, _createPresenceStateOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createDisCurrentFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsSensors, 'Current Distance', isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, _createCurrentDistanceOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createIlluminanceValueFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsSensors, 'Illuminance Value', OperationDialogType.integerSteps, _createIlluminanceValueOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createCheckingResultFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsSensors, 'Self-Test Result', OperationDialogType.listOfOptions, _createSelfTestResultOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createSwitchFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsAC, 'Power', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createTempSetFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsAC, 'Set Temperature', isAutomation ? OperationDialogType.integerSteps : OperationDialogType.temperature, isAutomation ? _createAutomationTemperatureOptions() : _createTemperatureOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createTempCurrentFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsAC, 'Current Temperature', OperationDialogType.integerSteps, _createCurrentTemperatureOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createModeFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsAC, 'Mode', OperationDialogType.listOfOptions, _createAcModeOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createLevelFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsAC, 'Fan Speed', OperationDialogType.listOfOptions, _createFanSpeedOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createChildLockFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsAC, 'Child Lock', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createSwitch1Function(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { switch (action.productType) { case "3G": return _createSceneFunction( action, action.deviceName, Assets.assetsIcons3GangSwitch, 'Light 1 Switch', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); case "2G": return _createSceneFunction( action, action.deviceName, Assets.twoGang, 'Light 1 Switch', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); case "1G": return _createSceneFunction( action, action.deviceName, Assets.oneGang, 'Light 1 Switch', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); default: return _createSceneFunction( action, 'None', Assets.assetsRemoteUnlockReq, 'None', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } } SceneStaticFunction _createSwitch2Function(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { switch (action.productType) { case "3G": return _createSceneFunction( action, action.deviceName, Assets.assetsIcons3GangSwitch, 'Light 2 Switch', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); case "2G": return _createSceneFunction( action, action.deviceName, Assets.twoGang, 'Light 2 Switch', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); default: return _createSceneFunction( action, action.deviceName, Assets.oneGang, 'Light Switch', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } } SceneStaticFunction _createSwitch3Function(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIcons3GangSwitch, 'Light 3 Switch', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createCountdown1Function(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { switch (action.productType) { case "3G": return _createSceneFunction( action, action.deviceName, Assets.assetsIcons3GangSwitch, 'Light 1 CountDown', isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, isAutomation ? _createAutomationCountDownOptions() : _createCountdownOptions(), isAutomation, comparator, uniqueCustomId, ); case "2G": return _createSceneFunction( action, action.deviceName, Assets.twoGang, 'Light 1 CountDown', isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, isAutomation ? _createAutomationCountDownOptions() : _createCountdownOptions(), isAutomation, comparator, uniqueCustomId, ); default: return _createSceneFunction( action, action.deviceName, Assets.oneGang, 'Light CountDown', isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, isAutomation ? _createAutomationCountDownOptions() : _createCountdownOptions(), isAutomation, comparator, uniqueCustomId, ); } } SceneStaticFunction _createCountdown2Function(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { switch (action.productType) { case "3G": return _createSceneFunction( action, action.deviceName, Assets.assetsIcons3GangSwitch, 'Light 2 CountDown', isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, isAutomation ? _createAutomationCountDownOptions() : _createCountdownOptions(), isAutomation, comparator, uniqueCustomId, ); case "2G": return _createSceneFunction( action, action.deviceName, Assets.twoGang, 'Light 2 CountDown', isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, isAutomation ? _createAutomationCountDownOptions() : _createCountdownOptions(), isAutomation, comparator, uniqueCustomId, ); default: return _createSceneFunction( action, action.deviceName, Assets.oneGang, 'Light CountDown', isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, isAutomation ? _createAutomationCountDownOptions() : _createCountdownOptions(), isAutomation, comparator, uniqueCustomId, ); } } SceneStaticFunction _createCountdown3Function(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIcons3GangSwitch, 'Light 3 CountDown', isAutomation ? OperationDialogType.integerSteps : OperationDialogType.countdown, isAutomation ? _createAutomationCountDownOptions() : _createCountdownOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createSwitchAlarmSoundFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsGateway, 'Switch Alarm Sound', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createMasterStateFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsGateway, 'Master State', OperationDialogType.listOfOptions, _createMasterStateOptions(), isAutomation, comparator, uniqueCustomId, ); } SceneStaticFunction _createFactoryResetFunction(Action action, bool isAutomation, String? comparator, String? uniqueCustomId) { return _createSceneFunction( action, action.deviceName, Assets.assetsIconsGateway, 'Factory Reset', OperationDialogType.onOff, _createOnOffOptions(), isAutomation, comparator, uniqueCustomId, ); } List _createFingerprintUnlockOptions() { return [ SceneOperationalValue( icon: '', description: "", value: 0.0, minValue: 0.0, maxValue: 999, stepValue: 1.0, ), ]; } List _createPasswordUnlockOptions() { return [ SceneOperationalValue( icon: '', description: "", value: 0.0, minValue: 0.0, maxValue: 999, stepValue: 1.0, ), ]; } List _createCardUnlockOptions() { return [ SceneOperationalValue( icon: '', description: "", value: 0.0, minValue: 0.0, maxValue: 999, stepValue: 1.0, ), ]; } List _createLockAlarmOptions() { return [ SceneOperationalValue( icon: Assets.assetsFingerprintUnlock, description: "Fingerprint Mismatch", value: 'wrong_finger', ), ]; } List _createUnlockRequestOptions() { return [ SceneOperationalValue( icon: '', description: "", value: 0.0, minValue: 0, maxValue: 90, stepValue: 1, ), ]; } List _createResidualElectricityOptions() { return [ SceneOperationalValue( icon: '', description: "", value: 0.0, minValue: 0, maxValue: 100, stepValue: 1, ), ]; } List _createUnlockAppOptions() { return [ SceneOperationalValue( icon: '', description: "", value: 0.0, minValue: 0, maxValue: 999, stepValue: 1, ), ]; } List _createTemporaryPasswordUnlockOptions() { return [ SceneOperationalValue( icon: '', description: "", value: 0.0, minValue: 0, maxValue: 999, stepValue: 1, ), ]; } List _createPresenceStateOptions() { return [ SceneOperationalValue( icon: Assets.assetsIconsPresenceSensorAssetsEmpty, value: 'none', description: 'None', ), SceneOperationalValue( icon: Assets.assetsPresence, value: 'presence', description: 'Presence', ), ]; } List _createCurrentDistanceOptions() { return [ SceneOperationalValue( icon: '', value: 0.0, description: "CM", minValue: 1, maxValue: 600, stepValue: 1, ), ]; } List _createIlluminanceValueOptions() { return [ SceneOperationalValue( icon: '', value: 0.0, description: "Lux", minValue: 0, maxValue: 10000, stepValue: 1, ), ]; } List _createSelfTestResultOptions() { return [ SceneOperationalValue( icon: Assets.assetsSelfTestResult, value: 'check_success', description: 'Self Testing Success', ), ]; } List _createAutomationTemperatureOptions() { return [ SceneOperationalValue( icon: Assets.assetsCelsiusDegrees, value: 0.0, description: '°C', minValue: 20, maxValue: 30, stepValue: 0.5, ), ]; } List _createAutomationCountDownOptions() { return [ SceneOperationalValue( icon: '', description: "sec", value: 0.0, minValue: 0, maxValue: 43200, stepValue: 1, ), ]; } List _createFarDetectionOptions() { final distances = [75, 150, 225, 300, 375, 450, 525, 600]; return distances .map( (distance) => SceneOperationalValue( icon: Assets.assetsFarDetectionFunction, value: distance, description: '${distance}cm', iconValue: distance.toString(), ), ) .toList(); } List _createTemperatureOptions() { return [ SceneOperationalValue( icon: Assets.assetsCelsiusDegrees, value: 0, description: 'COOL TO', ), ]; } List _createMasterStateOptions() { return [ SceneOperationalValue( icon: Assets.assetsAcPower, description: "Alarm", value: 'alarm', ), SceneOperationalValue( icon: Assets.assetsAcPowerOFF, description: "Normal", value: 'normal', ), ]; } List _createAcModeOptions() { return [ SceneOperationalValue( icon: Assets.assetsAcCooling, description: AcValuesEnums.Cooling.name, value: TempModes.cold.name, ), SceneOperationalValue( icon: Assets.assetsAcHeating, description: AcValuesEnums.Heating.name, value: TempModes.hot.name, ), SceneOperationalValue( icon: Assets.assetsFanSpeed, description: AcValuesEnums.Ventilation.name, value: TempModes.wind.name, ), ]; } List _createFanSpeedOptions() { return [ SceneOperationalValue( icon: Assets.assetsAcFanLow, description: ValueACRange.LOW.name, value: FanSpeeds.low.name, ), SceneOperationalValue( icon: Assets.assetsAcFanMiddle, description: ValueACRange.MIDDLE.name, value: FanSpeeds.middle.name, ), SceneOperationalValue( icon: Assets.assetsAcFanHigh, description: ValueACRange.HIGH.name, value: FanSpeeds.high.name, ), SceneOperationalValue( icon: Assets.assetsAcFanAuto, description: ValueACRange.AUTO.name, value: FanSpeeds.auto.name, ), ]; } List _createCountdownOptions() { return [ SceneOperationalValue( icon: '', value: 0, ), ]; } List getOperationsForOneFunction({ required String deviceId, required SceneStaticFunction taskItem, required bool isAutomation, }) { if (deviceId.contains('delay')) { return [ SceneStaticFunction( uniqueCustomId: taskItem.uniqueCustomId, deviceId: taskItem.deviceId, deviceName: 'delay', deviceIcon: Assets.delay, icon: Assets.delay, operationName: 'delay', functionValue: taskItem.functionValue, code: '', operationDialogType: OperationDialogType.delay, operationalValues: [ SceneOperationalValue( icon: '', description: "", value: 0, ), ], ), ]; } if (taskItem.code == CreateSceneEnum.smartSceneSelect.name) { return [ SceneStaticFunction( uniqueCustomId: taskItem.uniqueCustomId, deviceId: taskItem.deviceId, deviceName: taskItem.deviceName.toString(), deviceIcon: taskItem.operationName == 'automation' ? Assets.player : Assets.handClickIcon, icon: taskItem.operationName == 'automation' ? Assets.player : Assets.handClickIcon, operationName: taskItem.operationName, operationDialogType: OperationDialogType.onOff, functionValue: taskItem.functionValue == 'rule_enable' ? true : false, code: CreateSceneEnum.smartSceneSelect.name, operationalValues: [ SceneOperationalValue( icon: Assets.assetsAcPower, description: "Enable", value: 'rule_enable', ), SceneOperationalValue( icon: Assets.assetsAcPowerOFF, description: "Disable", value: 'rule_disable', ), ], ), ]; } return [ _mapExecutorPropertyToSceneFunction( Action( deviceName: taskItem.deviceName, productType: '', entityId: deviceId, executorProperty: ExecutorProperty( functionCode: taskItem.code, functionValue: taskItem.functionValue, ), actionExecutor: '', ), isAutomation, comparator: taskItem.comparator, uniqueCustomId: taskItem.uniqueCustomId, ), ]; } List _createCurrentTemperatureOptions() { return [ SceneOperationalValue( icon: Assets.assetsCelsiusDegrees, value: 0.0, description: '°C', minValue: -9.9, maxValue: 99.9, stepValue: 0.1, ), ]; } }