import 'package:syncrow_web/pages/device_managment/ac/model/ac_model.dart'; import 'package:syncrow_web/pages/routiens/models/ac/ac_operational_value.dart'; import 'package:syncrow_web/pages/routiens/models/device_functions.dart'; import 'package:syncrow_web/utils/constants/app_enum.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; abstract class ACFunction extends DeviceFunction { ACFunction({ required super.deviceId, required super.deviceName, required super.code, required super.operationName, required super.icon, }); List getOperationalValues(); } class SwitchFunction extends ACFunction { SwitchFunction({required super.deviceId, required super.deviceName}) : super( code: 'switch', operationName: 'Power', icon: Assets.assetsAcPower, ); @override List getOperationalValues() => [ ACOperationalValue( icon: Assets.assetsAcPower, description: "ON", value: true, ), ACOperationalValue( icon: Assets.assetsAcPowerOFF, description: "OFF", value: false, ), ]; } class ModeFunction extends ACFunction { ModeFunction({required super.deviceId, required super.deviceName}) : super( code: 'mode', operationName: 'Mode', icon: Assets.assetsFreezing, ); @override List getOperationalValues() => [ ACOperationalValue( icon: Assets.assetsAcCooling, description: "Cooling", value: TempModes.cold.name, ), ACOperationalValue( icon: Assets.assetsAcHeating, description: "Heating", value: TempModes.hot.name, ), ACOperationalValue( icon: Assets.assetsFanSpeed, description: "Ventilation", value: TempModes.wind.name, ), ]; } class TempSetFunction extends ACFunction { final int min; final int max; final int step; TempSetFunction({required super.deviceId, required super.deviceName}) : min = 200, max = 300, step = 5, super( code: 'temp_set', operationName: 'Set Temperature', icon: Assets.assetsTempreture, ); @override List getOperationalValues() { List values = []; for (int temp = min; temp <= max; temp += step) { values.add(ACOperationalValue( icon: Assets.assetsTempreture, description: "${temp / 10}°C", value: temp, )); } return values; } } class LevelFunction extends ACFunction { LevelFunction({required super.deviceId, required super.deviceName}) : super( code: 'level', operationName: 'Fan Speed', icon: Assets.assetsFanSpeed, ); @override List getOperationalValues() => [ ACOperationalValue( icon: Assets.assetsAcFanLow, description: "LOW", value: FanSpeeds.low.name, ), ACOperationalValue( icon: Assets.assetsAcFanMiddle, description: "MIDDLE", value: FanSpeeds.middle.name, ), ACOperationalValue( icon: Assets.assetsAcFanHigh, description: "HIGH", value: FanSpeeds.high.name, ), ACOperationalValue( icon: Assets.assetsAcFanAuto, description: "AUTO", value: FanSpeeds.auto.name, ), ]; } class ChildLockFunction extends ACFunction { ChildLockFunction({required super.deviceId, required super.deviceName}) : super( code: 'child_lock', operationName: 'Child Lock', icon: Assets.assetsChildLock, ); @override List getOperationalValues() => [ ACOperationalValue( icon: Assets.assetsSceneChildLock, description: "Lock", value: true, ), ACOperationalValue( icon: Assets.assetsSceneChildUnlock, description: "Unlock", value: false, ), ]; }