<?php
namespace App\Helpers;


use App\Lib\Common\Utility;
use App\Slack;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Lang;

class CmdHelper
{
    static function runCommand(array $data) {
        try {

            $event = $data['event'];

            if (isset($data['input']) && $data['input']){
                $data = json_decode($data['input'], 1);
            }
            $cmd = Arr::get($data,'cmd','');
            if (!empty($cmd)) {
                switch ($cmd) {
                    case 'command:SendEmail':
                    case 'command:SendSms':
                    case 'command:avansePaymentProcess':
                    case 'command:mConnect':
                    case 'command:ABFLWebhook':
                    case 'command:JMWebhook':
                    case 'command:VivritiWebhook':
                    case 'command:UtkarshWebhook':
                    case 'command:HomevilleWebhook':
                    case 'command:DigioWebhook':
                    case 'command:WhatsappAgentMigrateDocuments':
                    case 'command:NoTouchBureauCall':
                    case 'command:SignedDAUpload':
                    case 'command:SseUploadStatementFinbit':
                    case 'command:TallySubInt':
                    case 'command:monthly-subvention-invoice-export':
                    case 'command:ExecuteJob':
                    case 'command:VendorWebhook':
                    case 'command:TableOfOffer':
                    case 'command:AgencyApplicationCommand':
                    case 'command:LoanHypothecation':
                    case 'command:AccountAggregatorWebhook':
                    case 'command:AccountAggregatorMonitoringWebhook':
                    case 'command:PirimidWebhook':
                    case 'command:BreApiCall':
                    case 'command:AutoDecision':
                    case 'command:PSUDecision':
                    case 'command:CheckPreEligibility':
                    case 'command:PayTMUpdate':

                        $payload = [
                            '--con' => Arr::get($data,'con',''),
                            '--param' => (array) Arr::get($data,'param',[])
                        ];
                        if(in_array($cmd, ['command:PSUDecision', 'command:CheckPreEligibility'])){
                            $payload = array_merge($payload, ['--event' => $event]);
                        }

                        $ret = \Artisan::call($cmd, $payload);
                        return Utility::handlerSendSuccess($ret,Lang::get('message.exec_success'));
                        break;
                    case 'command:postVkycApproved':
                    case 'command:postCreateCustomer':
                    case 'command:postCreateFinance':
                    case 'command:postDisbursementInstruction':
                    case 'command:SendProformaCommand':
                    case 'command:createCamReportCommand':
                    case 'command:postBureauPullCommand':
                    case 'command:postCSBureauBankPullCommand':
                    case 'command:postFormCompletedCommand':
                        $ret = \Artisan::call($cmd,[
                            '--lid' =>  (array) Arr::get($data,'app_id',[])
                        ]);
                        return Utility::handlerSendSuccess($ret,Lang::get('message.exec_success'));
                        break;
                    case 'command:postVkycWebhook':
                        $ret = \Artisan::call($cmd,[
                            '--data' =>  (array) Arr::get($data,'data',[])
                        ]);
                        return Utility::handlerSendSuccess($ret,Lang::get('message.exec_success'));
                        break;
                    case 'command:SendNotificationToMerchant':
                        $ret = \Artisan::call($cmd,[
                            '--user_id' =>  (array) Arr::get($data,'user_id',[])
                        ]);
                        return Utility::handlerSendSuccess($ret,Lang::get('message.exec_success'));
                        break;
                    case 'command:AvanseNocCommand':
                        ob_start();
                        $ret = \Artisan::call($cmd,[
                            '--job_id' =>  Arr::get($data,'job_id','')
                        ]);
                        return Utility::handlerSendSuccess($ret,Lang::get('message.exec_success'));
                        break;
                    case 'command:AgencyCommunicationCommand':
                        $ret = \Artisan::call($cmd,[
                            '--app_id' =>  (array) Arr::get($data,'app_id',[])
                        ]);
                        return Utility::handlerSendSuccess($ret,Lang::get('message.exec_success'));
                        break;
                    case 'command:LendboxDocumentUpload':
                        $ret = \Artisan::call($cmd,[
                            '--lid' =>  (array) Arr::get($data,'lid',[]),
                            '--uid' =>  (array) Arr::get($data,'uid',[]),
                            '--isLbLsp' =>  (array) Arr::get($data,'isLbLsp',[])
                        ]);
                        return Utility::handlerSendSuccess($ret,Lang::get('message.exec_success'));
                        break;
                    case 'command:KMGP2PDocumentUpload':
                        $ret = \Artisan::call($cmd,[
                            '--lid' =>  (array) Arr::get($data,'lid',[]),
                            '--uid' =>  (array) Arr::get($data,'uid',[])
                        ]);
                        return Utility::handlerSendSuccess($ret,Lang::get('message.exec_success'));
                        break;
                    case 'command:LendboxRepayments':
                        $ret = \Artisan::call($cmd,[
                            '--con' => Arr::get($data,'con',''),
                            '--param' => (array) Arr::get($data,'param',[])
                        ]);
                        return Utility::handlerSendSuccess($ret,Lang::get('message.exec_success'));
                        break;
                    case 'command:LendboxTransactionStatus':
                        $ret = \Artisan::call($cmd,[
                            '--con' => Arr::get($data,'con',''),
                            '--param' => (array) Arr::get($data,'param',[])
                        ]);
                        return Utility::handlerSendSuccess($ret,Lang::get('message.exec_success'));
                        break;
                    default:
                        return Utility::handlerSendFailed(Lang::get("message.no_case_cmd").$cmd);
                        break;
                }
            }
            return Utility::handlerSendFailed(Lang::get("message.no_param_cmd"));
        } catch(ModelNotFoundException $e) {
            report($e);
            return Utility::handlerSendFailed(Lang::get("message.mdl_nt_found"));
        } catch (\Exception $e) {
            report($e);
            return Utility::handlerSendFailed($e->getMessage());
        }
    }
}
