['label'=>'Write log','fields'=>['message']], 'webhook'=>['label'=>'Send webhook','fields'=>['url','method']], 'email'=>['label'=>'Send email','fields'=>['to','subject','body']], 'delay'=>['label'=>'Delay','fields'=>['seconds']], ]; } public function execute(AutomationStep $step, array $payload): array { $config=$step->configuration ?? []; return match($step->action_type) { 'log'=>$this->log($config,$payload), 'webhook'=>$this->webhook($config,$payload), 'email'=>$this->email($config,$payload), 'delay'=>$this->delay($config), default=>throw new \InvalidArgumentException("Unknown automation action [{$step->action_type}]."), }; } private function log(array $config,array $payload): array { $message=(string)($config['message']??'Automation executed'); Log::info($message,$payload); return ['message'=>$message]; } private function webhook(array $config,array $payload): array { $url=(string)($config['url']??''); if ($url==='') throw new \InvalidArgumentException('Webhook URL is required.'); $method=strtolower((string)($config['method']??'post')); $response=Http::timeout(config('automation.webhook_timeout',10))->send($method,$url,['json'=>$payload]); $response->throw(); return ['status'=>$response->status()]; } private function email(array $config,array $payload): array { $to=(string)($config['to']??''); if ($to==='') throw new \InvalidArgumentException('Email recipient is required.'); $subject=(string)($config['subject']??'Automation notification'); $body=(string)($config['body']??json_encode($payload,JSON_PRETTY_PRINT)); Mail::raw($body,fn($message)=>$message->to($to)->subject($subject)); return ['to'=>$to]; } private function delay(array $config): array { $seconds=max(0,min(30,(int)($config['seconds']??1))); if ($seconds>0) sleep($seconds); return ['seconds'=>$seconds]; } }