import 'package:syncrow_web/pages/routines/models/device_functions.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; class CpsOperationalValue { final String icon; final String description; final dynamic value; CpsOperationalValue({ required this.icon, required this.description, required this.value, }); } abstract class CpsFunctions extends DeviceFunction { CpsFunctions({ required super.deviceId, required super.deviceName, required super.code, required super.operationName, required super.icon, required this.type, }); final String type; List getOperationalValues(); } final class CpsRadarSwitchFunction extends CpsFunctions { CpsRadarSwitchFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: 'radar_switch', operationName: 'Radar Switch', icon: Assets.acPower, ); @override List getOperationalValues() => [ CpsOperationalValue( icon: Assets.assetsAcPower, description: "ON", value: true, ), CpsOperationalValue( icon: Assets.assetsAcPowerOFF, description: "OFF", value: false, ), ]; } final class CpsSpatialParameterSwitchFunction extends CpsFunctions { CpsSpatialParameterSwitchFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: 'space_para_switch', operationName: 'Spatial Parameter Switch', icon: Assets.acPower, ); @override List getOperationalValues() => [ CpsOperationalValue( icon: Assets.assetsAcPower, description: "ON", value: true, ), CpsOperationalValue( icon: Assets.assetsAcPowerOFF, description: "OFF", value: false, ), ]; } final class CpsSensitivityFunction extends CpsFunctions { CpsSensitivityFunction({ required super.deviceId, required super.deviceName, required super.type, }) : min = 1, max = 10, step = 1, scale = 0, super( code: 'sensitivity', operationName: 'Sensitivity', icon: Assets.sensitivity, ); final int min; final int max; final int step; final int scale; @override List getOperationalValues() { final values = []; for (var value = min; value <= max; value += step) { values.add( CpsOperationalValue( icon: Assets.sensitivity, description: '$value', value: value, ), ); } return values; } } final class CpsMovingSpeedFunction extends CpsFunctions { CpsMovingSpeedFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Moving Speed', icon: Assets.speedoMeter, ); @override List getOperationalValues() { return []; } } final class CpsSpatialStaticValueFunction extends CpsFunctions { CpsSpatialStaticValueFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Spacial Static Value', icon: Assets.spatialStaticValue, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsSpatialMotionValueFunction extends CpsFunctions { CpsSpatialMotionValueFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Spatial Motion Value', icon: Assets.spatialMotionValue, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsMaxDistanceOfDetectionFunction extends CpsFunctions { CpsMaxDistanceOfDetectionFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Maximum Distance Of Detection', icon: Assets.currentDistanceIcon, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsMaxDistanceOfStaticDetectionFunction extends CpsFunctions { CpsMaxDistanceOfStaticDetectionFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Maximum Distance Of Static Detection', icon: Assets.currentDistanceIcon, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsDetectionRangeFunction extends CpsFunctions { CpsDetectionRangeFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Detection Range', icon: Assets.farDetection, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsDistanceOfMovingObjectsFunction extends CpsFunctions { CpsDistanceOfMovingObjectsFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Distance Of Moving Objects', icon: Assets.currentDistanceIcon, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsPresenceJudgementThrsholdFunction extends CpsFunctions { CpsPresenceJudgementThrsholdFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Presence Judgement Threshold', icon: Assets.presenceJudgementThrshold, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsMotionAmplitudeTriggerThresholdFunction extends CpsFunctions { CpsMotionAmplitudeTriggerThresholdFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Motion Amplitude Trigger Threshold', icon: Assets.presenceJudgementThrshold, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsPerpetualBoundaryFunction extends CpsFunctions { CpsPerpetualBoundaryFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Perpetual Boundary', icon: Assets.boundary, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsMotionTriggerBoundaryFunction extends CpsFunctions { CpsMotionTriggerBoundaryFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Motion Trigger Boundary', icon: Assets.motionMeter, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsMotionTriggerTimeFunction extends CpsFunctions { CpsMotionTriggerTimeFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Motion Trigger Time', icon: Assets.motionMeter, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsMotionToStaticTimeFunction extends CpsFunctions { CpsMotionToStaticTimeFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Motion To Static Time', icon: Assets.motionMeter, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsEnteringNoBodyStateTimeFunction extends CpsFunctions { CpsEnteringNoBodyStateTimeFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Entering Nobody State Time', icon: Assets.motionMeter, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } } final class CpsSelfTestResultFunctions extends CpsFunctions { CpsSelfTestResultFunctions({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: 'self_test_result', operationName: 'Self-Test Result', icon: Assets.selfTestResult, ); @override List getOperationalValues() { return [ CpsOperationalValue( description: 'Self Testing', icon: Assets.selfTestResult, value: 'self_testing', ), CpsOperationalValue( description: 'Self Testing Success', icon: Assets.selfTestingSuccess, value: 'self_testing_success', ), CpsOperationalValue( description: 'Self Testing Failure', icon: Assets.selfTestingFailure, value: 'self_testing_failure', ), CpsOperationalValue( description: 'Self Testing Timeout', icon: Assets.selfTestingTimeout, value: 'self_testing_timeout', ), CpsOperationalValue( description: 'Communication Fault', icon: Assets.communicationFault, value: 'communication_fault', ), CpsOperationalValue( description: 'Radar Fault', icon: Assets.radarFault, value: 'radar_fault', ), ]; } } final class CpsNobodyTimeFunction extends CpsFunctions { CpsNobodyTimeFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: 'nobody_time', operationName: 'Entering Nobody Time', icon: Assets.assetsNobodyTime, ); @override List getOperationalValues() { return [ CpsOperationalValue( icon: Assets.assetsNobodyTime, description: 'None', value: 'none', ), CpsOperationalValue( icon: Assets.assetsNobodyTime, description: '10sec', value: '10s', ), CpsOperationalValue( icon: Assets.assetsNobodyTime, description: '30sec', value: '30s', ), CpsOperationalValue( icon: Assets.assetsNobodyTime, description: '1min', value: '1min', ), CpsOperationalValue( icon: Assets.assetsNobodyTime, description: '2min', value: '2min', ), CpsOperationalValue( icon: Assets.assetsNobodyTime, description: '5min', value: '5min', ), CpsOperationalValue( icon: Assets.assetsNobodyTime, description: '10min', value: '10min', ), CpsOperationalValue( icon: Assets.assetsNobodyTime, description: '30min', value: '30min', ), CpsOperationalValue( icon: Assets.assetsNobodyTime, description: '1hour', value: '1hr', ), ]; } } final class CpsMovementFunctions extends CpsFunctions { CpsMovementFunctions({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: 'movement', operationName: 'Movement', icon: Assets.motion, ); @override List getOperationalValues() { return [ CpsOperationalValue( description: 'None', icon: Assets.nobodyTime, value: 'none', ), CpsOperationalValue( description: 'Close To', icon: Assets.closeToMotion, value: 'parlour', ), CpsOperationalValue( description: 'Far Away', icon: Assets.farAwayMotion, value: 'far_away', ), ]; } } final class CpsCustomModeFunction extends CpsFunctions { CpsCustomModeFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: 'custom_mode', operationName: 'Custom Mode', icon: Assets.cpsCustomMode, ); @override List getOperationalValues() { return [ CpsOperationalValue( icon: Assets.cpsMode1, description: 'Mode 1', value: 'mode1', ), CpsOperationalValue( icon: Assets.cpsMode2, description: 'Mode 2', value: 'mode2', ), CpsOperationalValue( icon: Assets.cpsMode3, description: 'Mode 3', value: 'mode3', ), CpsOperationalValue( icon: Assets.cpsMode4, description: 'Mode 4', value: 'mode4', ), ]; } } final class CpsSpaceTypeFunctions extends CpsFunctions { CpsSpaceTypeFunctions({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: 'space_type', operationName: 'Space Type', icon: Assets.spaceType, ); @override List getOperationalValues() { return [ CpsOperationalValue( description: 'Office', icon: Assets.office, value: 'office', ), CpsOperationalValue( description: 'Parlour', icon: Assets.parlour, value: 'parlour', ), CpsOperationalValue( description: 'Bathroom', icon: Assets.bathroom, value: 'bathroom', ), CpsOperationalValue( description: 'Bedroom', icon: Assets.bedroom, value: 'bedroom', ), CpsOperationalValue( description: 'DIY', icon: Assets.dyi, value: 'dyi', ), ]; } } class CpsPresenceStatusFunctions extends CpsFunctions { CpsPresenceStatusFunctions({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: 'presence_state', operationName: 'Presence Status', icon: Assets.presenceSensor, ); @override List getOperationalValues() { return [ CpsOperationalValue( icon: Assets.nobodyTime, description: 'None', value: 'none', ), CpsOperationalValue( icon: Assets.presenceState, description: 'Presence', value: 'presence', ), CpsOperationalValue( icon: Assets.motion, description: 'Motion', value: 'motion', ), ]; } } final class CpsSportsParaFunction extends CpsFunctions { CpsSportsParaFunction({ required super.deviceId, required super.deviceName, required super.type, }) : super( code: '', operationName: 'Sports Para', icon: Assets.sportsPara, ); @override List getOperationalValues() { // TODO: implement getOperationalValues throw UnimplementedError(); } }