<?php

namespace App\Jobs;

use Auth;
use Request;
use App\Models\User;
use App\Models\CRMCall;
use App\Models\AgentNumber;
use App\Models\Dialline;
use App\Models\Kqueue;
use Response;
use Log;
use Hash;

class DialerLib
{
    /**
     * To Create New CRM call entry based on calling details
     */
    public function createCRMCallEntry($crmdata, $ppldata)
    {
        $nowts = microtime(true) * 1000;
        //start the call log
        $crmcall = new CRMCall();
        $crmdata['number'] = $this->arrayKey('number', $crmdata);
        $crmcall->number = $this->arrayKey('mobile', $ppldata, $crmdata['number']);
        $crmcall->user_id = $this->arrayKey('user_id', $crmdata, '0');
        $crmcall->sipid_id = $this->arrayKey('sipid_id', $crmdata, '0');
        $crmcall->crm_id = $ppldata['crm_id'];
        $crmcall->client = $ppldata['client'];
        $crmcall->department = $this->arrayKey('department', $ppldata);
        $crmcall->state = 'New';
        $crmcall->type = $crmdata['type']; //"MOutbound";
        $crmcall->dialline_id = $crmdata['dialline_id'];
        $crmcall->setTs('ts_Wait', $nowts);
        $crmcall->setTs('ts_Call', $nowts);
        $crmcall->did = $this->arrayKey('did', $crmdata);

        $tdata = array();
        $crmcall->data = json_encode($tdata);
        $crmcall->save();
        return $crmcall;
    }
    function arrayKey($key, $arraydata, $defaultval = '')
    {
        return (array_key_exists($key, $arraydata)) ? $arraydata[$key] : $defaultval;
    }
    function createAgentcallEntry($user)
    {
        $sipid = $this->mobileAgentlogin($user);
        if ($sipid) {
            $dialline = Dialline::where('enabled', '1')->where('status', 'Free')->where('server', env('app_ip'))->first();
      
        if ($dialline) {
                $dialline->status = "Agent";
                $dialline->number = $sipid->number;
                $dialline->save();

                $crmcall = new CRMCall();
                $crmcall->number = $sipid->number;
                $crmcall->sipid_id = $sipid->id;
                $crmcall->user_id = $user->id;
                $crmcall->userstatus = "AgentCall";
                $crmcall->usersubstatus = "AgentCall";
                $crmcall->save();
                $sipid->ready = 2;
                $sipid->save();

                $dialline->call_id = $crmcall->id;
                $dialline->user_id = $user->id;
                $dialline->save();

                $newqueue = new Kqueue();
                $newqueue->userToMobileAgent($sipid, $dialline);
            } else {
                return "error";
            }
        }
        return $sipid;
    }
    function mobileAgentlogin($user)
    {
        $sipid = AgentNumber::where('user_id', $user->id)->first();
        if ($sipid == null) $sipid = new AgentNumber();
        if ($sipid) {
            $sipid->number = $user->phone;
            $sipid->campaign = $user->campaign;
            $sipid->server = env('app_ip');
            $sipid->user_id = $user->id;
            $sipid->save();
        }
        return $sipid;
    }
}