<?php
    use Phalcon\Cli\Task;
    use Phalcon\Queue\Beanstalk;

    class BackgroundTask extends Task
    {
        public function mainAction()
        {
            $queue = new Beanstalk($this->config["beanstalk_config"]);            
            while (($job = $queue->reserve()) !== false) {
                try{
                    $message = $job->getBody();
            
                    $this->logger->addItem("type_of_log", "background_job_log");
                    if( $message["method_type"] == 1 ){
                        if( $message["class"] === "FcmHelper" && $message["method"] === "sendNotif" ){
                            $this->logger->addItem("message", "Send Notif");                        
                        }
                        forward_static_call_array ([$message["class"], $message["method"]], $message["method_params"]);                    
                    }else{
                        if( $message["class"] === "MailHelper" && $message["method"] === "sendMail" ){
                            $this->logger->addItem("message", "Send Email");                        
                        }
                        $obj = new $message["class"]($message["const_params"]);
                        call_user_func_array([$obj, $message["method"]], $message["method_params"]);
                    }

                    $this->logger->addItem("additional_data", $message["method_params"]);
                    $this->logger->info();
                    
                    $job->delete();
                }catch(\Exception $e){
                    $this->logger->addItem("type_of_log", "background_job_exception");
                    $this->logger->addItem("error_message", $e->getMessage());
                    $this->logger->error();
                }
                
            }
        }
    }
?>