import { Device } from '../../domain/device/device.js' import { DeviceActionExecutor } from './device_action_executor.js' import logger from '@adonisjs/core/services/logger' /** * Action types */ export enum ActionType { SET_PARAMETER_VALUES = 'SET_PARAMETER_VALUES', SET_PARAMETER_ATTRIBUTES = 'SET_PARAMETER_ATTRIBUTES', SCHEDULE_INFORM = 'SCHEDULE_INFORM', DOWNLOAD = 'DOWNLOAD', UPLOAD = 'UPLOAD', FACTORY_RESET = 'FACTORY_RESET', REBOOT = 'REBOOT', } /** * Dispatches an action to the corresponding DeviceActionExecutor method */ export async function executeAction( deviceAction: DeviceActionExecutor, device: Device, actionType: ActionType, parameters: any[], callback: ((result: unknown) => Promise) = () => Promise.resolve('') ): Promise { switch (actionType) { case ActionType.SET_PARAMETER_VALUES: return deviceAction.applySetParameterValues(device, parameters as any[], callback as (r: boolean) => Promise) case ActionType.SET_PARAMETER_ATTRIBUTES: return deviceAction.applySetParameterAttributes(device, parameters as any[], callback as (r: boolean) => Promise) case ActionType.SCHEDULE_INFORM: return deviceAction.applyScheduleInform(device, parameters[0] as any, callback as (r: boolean) => Promise) case ActionType.DOWNLOAD: { const p = parameters[0] return deviceAction.applyDownload(device, p, callback as (r: boolean) => Promise) } case ActionType.UPLOAD: { const p = parameters[0] return deviceAction.applyUpload(device, p, callback as (r: boolean) => Promise) } case ActionType.FACTORY_RESET: { const p = parameters?.[0] return deviceAction.applyFactoryReset(device, p, callback as (r: boolean) => Promise) } case ActionType.REBOOT: { const p = parameters[0] return deviceAction.applyReboot(device, p, callback as (r: boolean) => Promise) } default: logger.error(`Unknown action type: ${actionType}`) return '' } }