import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/routines/bloc/routine_bloc/routine_bloc.dart'; import 'package:syncrow_web/pages/routines/models/device_functions.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/ac_dialog.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/ceiling_sensor/ceiling_sensor_helper.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/flush_presence_sensor/flush_presence_sensor.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/gateway/gateway_helper.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/one_gang_switch_dialog.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/power_clamp_enargy/energy_clamp_dialog.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/three_gang_switch_dialog.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/two_gang_switch_dialog.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/wall_sensor/wall_presence_sensor.dart'; import 'package:syncrow_web/pages/routines/widgets/routine_dialogs/water_heater/water_heater_presence_sensor.dart'; class DeviceDialogHelper { static Future?> showDeviceDialog({ required BuildContext context, required String dialogType, required Map data, required bool removeComparetors, }) async { final functions = data['functions'] as List; try { final result = await _getDialogForDeviceType( dialogType: dialogType, context: context, productType: data['productType'], data: data, functions: functions, removeComparetors: removeComparetors, ); if (result != null) { return result; } } catch (e) { debugPrint('Error: $e'); } return null; } static Future?> _getDialogForDeviceType({ required String dialogType, required BuildContext context, required String productType, required Map data, required List functions, required bool removeComparetors, }) async { final routineBloc = context.read(); final deviceSelectedFunctions = routineBloc.state.selectedFunctions[data['uniqueCustomId']] ?? []; switch (productType) { case 'AC': return ACHelper.showACFunctionsDialog( context: context, functions: functions, device: data['device'], deviceSelectedFunctions: deviceSelectedFunctions, uniqueCustomId: data['uniqueCustomId'], removeComparetors: removeComparetors, dialogType: dialogType, ); case '1G': return OneGangSwitchHelper.showSwitchFunctionsDialog( dialogType: dialogType, context: context, functions: functions, device: data['device'], deviceSelectedFunctions: deviceSelectedFunctions, uniqueCustomId: data['uniqueCustomId'], removeComparetors: removeComparetors); case '2G': return TwoGangSwitchHelper.showSwitchFunctionsDialog( dialogType: dialogType, context: context, functions: functions, device: data['device'], deviceSelectedFunctions: deviceSelectedFunctions, uniqueCustomId: data['uniqueCustomId'], removeComparetors: removeComparetors); case '3G': return ThreeGangSwitchHelper.showSwitchFunctionsDialog( dialogType: dialogType, context: context, functions: functions, device: data['device'], deviceSelectedFunctions: deviceSelectedFunctions, uniqueCustomId: data['uniqueCustomId'], removeComparetors: removeComparetors); case 'WPS': return WallPresenceSensor.showWPSFunctionsDialog( dialogType: dialogType, context: context, functions: functions, device: data['device'], deviceSelectedFunctions: deviceSelectedFunctions, uniqueCustomId: data['uniqueCustomId'], removeComparetors: removeComparetors); case 'CPS': return CeilingSensorHelper.showCeilingSensorDialog( context: context, functions: functions, device: data['device'], deviceSelectedFunctions: deviceSelectedFunctions, uniqueCustomId: data['uniqueCustomId'], dialogType: dialogType, ); case 'GW': return GatewayHelper.showGatewayFunctionsDialog( context: context, functions: functions, uniqueCustomId: data['uniqueCustomId'], deviceSelectedFunctions: deviceSelectedFunctions, device: data['device'], dialogType: dialogType, ); case 'NCPS': return FlushPresenceSensor.showFlushFunctionsDialog( context: context, functions: functions, uniqueCustomId: data['uniqueCustomId'], deviceSelectedFunctions: deviceSelectedFunctions, dialogType: dialogType, device: data['device'], ); case 'WH': return WaterHeaterDialogRoutines.showWHFunctionsDialog( context: context, functions: functions, uniqueCustomId: data['uniqueCustomId'], deviceSelectedFunctions: deviceSelectedFunctions, dialogType: dialogType, device: data['device'], ); case 'PC': return EnergyClampDialog.showEnergyClampFunctionsDialog( context: context, functions: functions, uniqueCustomId: data['uniqueCustomId'], deviceSelectedFunctions: deviceSelectedFunctions, dialogType: dialogType, device: data['device'], ); default: return null; } } }