<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth;
use App\User;
use App\model\Role;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Session;
use DB;
use Mail;
use File;
use App\model\Company;
class UserController extends Controller
  {

    public function __construct(){
      $this->middleware('auth');
    }
  
    /**
    * migrate_user.
    * @params: request data
    * @return \Illuminate\Http\Response
    * @ModifiedBy: Chintesh k.
    */
    public function migrate_user(){

        $admin=  DB::table('admin')->get();
        foreach($admin as $user){

            $data = $user;
              
            if(isset($data->lead_source_id) && $data->lead_source_id != ''){
              $lead_source_access_to_gent = $data->lead_source_id;
            }else{
              $lead_source_access_to_gent = 0;
            }

            if(isset($data->agent_user_id) && $data->agent_user_id != ''){ 
              $agents_to_manager =$data->agent_user_id;
            }else{
              $agents_to_manager = 0;
            }


            $RealeStateLicense = '';
            $WebsiteAddress    = ''; 

            $company           = 1;
            $create_by_user    = 1;

            $user = new User(); 
           
            if($data->agent_status=='Distributor'){

              $user->view_lead_market   = 1;
              $user->manage_distributor = 1;
            }else{

              $user->view_lead_market   = 0;
              $user->manage_distributor = 0;
            }

            if($data->agent_status=='Manager'){
              $user->manage_manager             = 1;
            }else{
              $user->manage_manager             = 0;
            }

            $user->id                         = $data->agent_id;
            $user->name                       = $data->agent_name;
            $user->email                      = $data->agent_username;
            $user->password                   = Hash::make($data->agent_pass);
            $user->last_name                  = $data->agent_lastname;
            $user->status                     = 1;
            $user->gender                     = 0;
            $user->phone                      = $data->agent_phone;
            $user->fax                        = $data->agent_fax;
            $user->address                    = $data->agent_add;
            $user->city                       = $data->agent_city;
            $user->state                      = $data->agent_state;
            $user->zip                        = $data->agent_zip;
            $user->daily_lead_max             = $data->agent_maxleads;
            $user->invoicing_cost             = $data->agent_invcost;
            $user->broker_cost                = $data->agent_split;
            $user->unit                       = $data->unit;

            if($data->agent_status=='Admin'){
              $status=2; 
            }elseif($data->agent_status=='A/R'){
              $status=4;
            }else{
              $status=3;
            }

            $user->user_role                  = $status;
            $user->assign_to_ar               = isset($data->ar_id)?($data->ar_id):0;
            $user->agents_to_manager          = $agents_to_manager;
            $user->lead_source_access_to_gent = $lead_source_access_to_gent;
            $user->remember_token             = '';
            $user->agent_cell                 = $data->agent_cell;
            $user->company                    = $company;
            $user->RealeStateLicense          = $RealeStateLicense;
            $user->WebsiteAddress             = $WebsiteAddress;
            $user->create_by_user             = 1;
            $user->create_by_role             = 1;
            $user->show_password              = $data->agent_pass;
            $user->source_color               = $data->source_color;
            $user->save();
        }
    }

    /**
    * getUserdocumentData  to get the signed document from mailbox.
    * @params: request data
    * @return \Illuminate\Http\Response
    * @ModifiedBy: Chintesh k.
    */  
    public function getUserdocumentData(Request $request){
        // return redirect()->route('home');
        try{

            $signdata = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

            if (request()->ajax()){
               

                /* Validate user here */
                $_client_email  =   $request->_client_email;
                
                if(!empty($request->_client_email)){

                    $ondate           = date("j F Y"); 
                    $matchsubjectstr  = Auth::user()->email;
                    $subsearchstr     = 'UNSEEN SUBJECT "'.$matchsubjectstr.'" ON "'.$ondate.'"';

                    /* Read document email to download attachment try to connect */
                    $inbox = imap_open("{mail.spiritre.com:993/imap/ssl/novalidate-cert}INBOX", "documents@spiritre.com", "Documents852*") or die('Cannot connect to MailBox: ' . imap_last_error());

                    $emails     = imap_search($inbox, $subsearchstr);

                    /* useful only if the above search is set to 'ALL' */
                    $max_emails = 1;
                    /* if any emails found, iterate through each email */ 
                    if(count($emails)) {
                        
                        $count = 1;
                        /* put the newest emails on top */
                        rsort($emails);
                        /* for every email... */
                        foreach($emails as $email_number){
                            /* get information specific to this email */
                            $overview = imap_fetch_overview($inbox,$email_number,0);
                            
                            /* get mail message, not actually used here. 
                               Refer to http://php.net/manual/en/function.imap-fetchbody.php
                               for details on the third parameter.
                             */
                            $message      = imap_fetchbody($inbox,$email_number,2);
                            
                            /* get mail structure */
                            $structure    = imap_fetchstructure($inbox, $email_number);
                            $attachments  = array();
                            
                            /* if any attachments found... */
                            if(isset($structure->parts) && count($structure->parts)){
                                for($i = 0; $i < count($structure->parts); $i++) 
                                {
                                    $attachments[$i] = array(
                                        'is_attachment' => false,
                                        'filename' => '',
                                        'name' => '',
                                        'attachment' => ''
                                    );
                                
                                    if($structure->parts[$i]->ifdparameters) 
                                    {
                                        foreach($structure->parts[$i]->dparameters as $object) 
                                        {
                                            if(strtolower($object->attribute) == 'filename') 
                                            {
                                                $attachments[$i]['is_attachment'] = true;
                                                $attachments[$i]['filename'] = $object->value;
                                            }
                                        }
                                    }
                                
                                    if($structure->parts[$i]->ifparameters) 
                                    {
                                        foreach($structure->parts[$i]->parameters as $object) 
                                        {
                                            if(strtolower($object->attribute) == 'name') 
                                            {
                                                $attachments[$i]['is_attachment'] = true;
                                                $attachments[$i]['name'] = $object->value;
                                            }
                                        }
                                    }
                                
                                    if($attachments[$i]['is_attachment']) 
                                    {
                                        
                                        $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1);
                                        
                                        /* 3 = BASE64 encoding */
                                        if($structure->parts[$i]->encoding == 3) 
                                        { 
                                            $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                                        }
                                        /* 4 = QUOTED-PRINTABLE encoding */
                                        elseif($structure->parts[$i]->encoding == 4) 
                                        { 
                                            $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
                                        }
                                    }
                                }
                            }
                      
                            foreach($attachments as $attachment){

                                if($attachment['is_attachment'] == 1){
                                    $filename = $attachment['name'];

                                    if(empty($filename)) $filename = $attachment['filename'];
                                    
                                    if(empty($filename)) $filename = time() . ".pdf";
                                    
                                      $uploadpath = uploadesigneddocumentpath();
              
                                      // if (!File::exists($uploadpath)){
                                      //   File::makeDirectory($uploadpath, 0777, true, true);
                                      // }

                                      $userackdoc[] = $email_number . "-" .$filename;
                                      $filenames = $email_number . "-" .$filename;
                                      // $fp = fopen($uploadpath. $email_number . "-" . $filename, "w+");
                                      // fwrite($fp, $attachment['attachment']);
                                      // fclose($fp);

                                      bucket_upload($attachment['attachment'],$uploadpath,$filenames,1);
                                }
                            }

                            $updatedocument['ack_documents']  = json_encode($userackdoc);
                            $updatedocument['is_ackdoc_reviewed']  = 1;
                            $updateUserAckdata    = User::where('id', Auth::user()->id)
                                                          ->update($updatedocument);
                            imap_close($inbox);
                            return response()->json([
                                  "status" => true,
                                  "message" => "Document downloaded successfully."
                              ], 200);   
                        }
                    }else{
                      imap_close($inbox);
                      return response()->json([
                                  "status" => false,
                                  "message" => "Something went wrong. Please check your username while signing the document."
                              ], 200);
                    }
                /* close the connection */                
                }else{
                  return response()->json([
                                  "status" => false,
                                  "message" => "Sorry, You can't access this page."
                              ], 200);
                }                             
                /* Validate user here */
            }
            return view('user.esign_document',array('signdata'=> $signdata));
        } catch (\Exception $e) {
            return response()->json([
                                "status" => false,
                                "message" => $e->getMessage()
                            ], 200);
        }
    }

       /**
    * getUserdocumentData  to upload Signature Image.
    * @params: request data
    * @return \Illuminate\Http\Response
    * @ModifiedBy: Chintesh k.
    */  
    public function uploadSignatureImage(Request $request){
        try{

            if (request()->ajax()){
                /* Validate user here */
                $_client_image  =   $request->image;
                
                if(!empty($_client_image)){

                    $image_array_1  = explode(";", $_client_image);
                    $image_array_2  = explode(",", $image_array_1[1]);
                    $data           = base64_decode($image_array_2[1]);

                    $id         = $request->id;
                    $uploadpath = uploadeProfileImgPath($id);
                    // if (!File::exists($uploadpath)){
                    //   File::makeDirectory($uploadpath, 0777, true, true);
                    // }

                    $image_name = $id . '_' . time() . '.png';

                    $image_name = bucket_upload($_client_image,$uploadpath,$image_name);
                    // file_put_contents($uploadpath.$image_name, $data);

                    // $new_img = getUploadedProfileImgPath().'/'.$id.'/'.$image_name;
                    $new_img = bucket_show(uploadeProfileImgPath($id).$image_name);


                    $user['profile_img']   =   $image_name;
                    $updateuser    =  User::where('id', $id)->update($user);
                    
                    return response()->json([
                              "status" => true,
                              "img" => $new_img,
                              "img_name"=> $image_name,
                              "message" => "Image Uploaded successfully."
                          ], 200);  
                /* close the connection */                
                }else{
                  return response()->json([
                                  "status" => false,
                                  "message" => "Something went wrong. Please check your username while signing the document."
                              ], 200);
                }
            }
        } catch (\Exception $e) {
            return response()->json([
                                "status" => false,
                                "message" => $e->getMessage()
                            ], 200);
        }
    }

    /*
    *  @function:  deleteSignatureImage
    *  @params: Request data
    *  @return: json response with status
    *  @updatedBy: Chintesh k
    */
    public function deleteSignatureImage(Request $request)
    {
      try {
        if ($request->input('id') != ''){
            $id             = $request->input('id');
            $user           = User::where('id',$id)->first();
            $s3ImagePath    = $user->profile_img;
            // dd(getUploadedProfileImgPath().$id.'/'.$s3ImagePath);
            $newuploadedoc['profile_img']     = NULL;
            $updateUser   = User::where('id', $id)->update($newuploadedoc);
            if ($updateUser){

                // $uploadpath   = uploadeProfileImgPath($id);
                // unlink($uploadpath . '/' . $request->input('image'));
                // $s3ImagePath = /

                bucket_delete(getUploadedProfileImgPath().$id.'/'.$s3ImagePath);

                // Storage::disk('s3')->delete($s3ImagePath);

                return response()
                    ->json(['status'=> true,'message' => 'Image Removed successfully!', 'class_name' => 'alert-success']);
            }else{
                return response()
                    ->json(['status'=> false,'message' => 'Something went wrong. Please try again later.', 'uploaded_image' => '', 'class_name' => 'alert-danger']);
            }
        }else{
          return response()
                    ->json(['status'=> false,'message' => 'Something went wrong. Please try again later.', 'uploaded_image' => '', 'class_name' => 'alert-danger']);
        }
      } catch (\Exception $e) {
        return response()
                    ->json(['status'=> false,'message' => $e->getMessage(), 'uploaded_image' => '', 'class_name' => 'alert-danger']);
      }
    }

    /**
    * Display a listing of the resource.
    * @params: request data
    * @return \Illuminate\Http\Response
    * @ModifiedBy: Chintesh k.
    */
    public function index(Request $request){
        	 //echo "Hello"; exit;
        try {

            $pref = '';
            if(session('agentSearchPrefrence')){
              $pref = session('agentSearchPrefrence');
            }else{
              $pref = 'name';
              Session::put('agentSearchPrefrence',$pref);
            }

            $items      = $request->items ?? 25;
            $role_id    = Auth::User()->user_role;
            $id         = Auth::user()->id;
            $company    = Auth::user()->company;

            if(user_rights($role_id) == False){
              return redirect('/');
            }

            $users  =  User::join('role', 'users.user_role', '=', 'role.id')
                                ->leftjoin('company','users.company','=','company.id')
                                ->select('users.*','company.mgmt_name', 'role.role_name')
                                ->where('users.id', '!=', $id);
        
            if($role_id == ADMIN){
              $users =  $users->where('users.company', '=', $company);
            }elseif($role_id == ARUSER){
              $users =  $users->where('users.assign_to_ar', '=', $id);
            }

            if(session('agentsearchresult') != ''){

              $usersearch   = session('agentsearchresult');
              $dataser      = $usersearch;
                    
              if($role_id == SUPERADMIN || $role_id == ADMIN){

                if($dataser == 'Active'){
                  $users      =   $users->where(function($query) use ($usersearch,$dataser) {
                                          $query->select('name','last_name')
                                            ->where('users.status','=',1);
                                          });
                }elseif($dataser == 'Inactive'){

                  $users      =   $users->where(function($query) use ($usersearch,$dataser) {
                                          $query->select('name','last_name')
                                                ->where('users.status','=',0);
                                          });
                }else{

                  /* condition if user put value in input box and don't choose aany filter type than it should work on 3 columns, fname,lname email*/
  
                  if(($pref == 'myone' || $pref == '')  && $usersearch != ''){

                    $users  =   $users->where(function($query) use ($usersearch,$dataser) {
                                      $query->select('*')
                                          ->orWhere('name', 'like', DB::raw("'%".$usersearch."%'"))
                                          ->orWhere('last_name', 'like', DB::raw("'%".$usersearch."%'"))
                                          ->orWhere('email', 'like', DB::raw("'%".$usersearch."%'"))
                                          ->orderBy('id', 'DESC');
                                      });
                  }
                       
                  if($pref == 'name'){
                        
                    $users    =   $users->where(function($query) use ($usersearch,$dataser,$pref) {
                                          $query->select('name','last_name')
                                                ->where('name', 'LIKE', '%'.$dataser.'%')
                                                ->orderBy($pref,'ASC');
                                          });
                                          
                        
                  }
                     
                  if($pref == 'last_name'){
                         
                    $users  = $users->where(function($query) use ($usersearch,$dataser,$pref) {
                                    $query->select('name','last_name')
                                          ->where('last_name', 'LIKE', '%'.$dataser.'%')
                                          ->orderBy($pref,'ASC');
                                    });
                  }
                     
                  if($pref == 'email'){
                         
                    $users = $users->where(function($query) use ($usersearch,$dataser,$pref) {
                                    $query->select('name','last_name')
                                          ->where('email', 'LIKE', '%'.$dataser.'%')
                                          ->orderBy($pref,'ASC');
                                    });
                  }
                                        
                  if($pref == 'company'){
                         
                    $users = $users->where(function($query) use ($usersearch,$dataser,$pref) {
                                    $query->select('name','last_name')
                                          ->where('mgmt_name', 'LIKE', '%'.$dataser.'%')
                                          ->orderBy($pref,'ASC');
                                    });
                  }
                     
                  if($pref == 'phone'){
                       
                    $users =  $users->where(function($query) use ($usersearch,$dataser,$pref) {
                                    $query->select('name','last_name')
                                          ->where('phone', 'LIKE', '%'.preg_replace("/[^0-9.]/", "", $dataser).'%')
                                          ->orderBy($pref,'ASC');
                                    });
                  }
                      
                  if($pref == 'city'){
                         
                    $users  =   $users->where(function($query) use ($usersearch,$dataser,$pref) {
                                        $query->select('name','last_name')
                                              ->where('city', 'LIKE', '%'.$dataser.'%')
                                              ->orderBy($pref,'ASC');
                                        });
                  }

                  if($pref == 'role_name'){
                         
                    $users =  $users->where(function($query) use ($usersearch,$dataser,$pref) {
                                    $query->select('name','last_name')
                                          ->where('role_name', 'LIKE', '%'.$dataser.'%')
                                          ->orderBy($pref,'ASC');
                                    });
                  }else{

                     $users = $users->where(function($query) use ($usersearch,$dataser,$pref) {
                                  $query->select('name','last_name')
                                        ->where('name', 'LIKE', '%'.$dataser.'%')
                                        ->orWhere('last_name', 'LIKE', '%'.$dataser.'%')
                                        ->orWhere('email', 'LIKE', '%'.$dataser.'%')
                                        ->orWhere('phone','LIKE','%'.preg_replace("/[^0-9.]/", "", $dataser).'%')
                                        ->orWhere('agent_cell','LIKE','%'.$dataser.'%')
                                        ->orWhere('city','LIKE','%'.$dataser.'%')
                                        ->orWhere('role_name','LIKE','%'.$dataser.'%')
                                        ->orWhere('mgmt_name','LIKE','%'.$dataser.'%')
                                        ->orderBy($pref,'ASC');
                                  });
                  }
                }
              }else{

                $users = $users->where(function($query) use ($usersearch,$dataser) {
                    $query->select('name','last_name')
                          ->where('name', 'LIKE', '%'.$dataser.'%')
                          ->orWhere('last_name', 'LIKE', '%'.$dataser.'%')
                          ->orWhere('email', 'LIKE', '%'.$dataser.'%')
                          ->orWhere('phone', 'LIKE', '%'.preg_replace("/[^0-9.]/", "", $dataser).'%');
                    });
              }
            }
            // echo "<pre>";
            // print_r($users->get()[0]->id); die;
            if(count($users->get()) == 1)
            {
                Session::forget('agentsearchresult');
                return redirect('/edituser/'.$users->get()[0]->id);
            }
            //DB::enableQueryLog();
            $users = $users->sortable()->paginate($items); 
            //dd(DB::getQueryLog()); exit;
            
           
        } catch (ModelNotFoundException $exception) {
          return back()->withError($exception->getMessage())->withInput();
        }
        return view('user.index', compact('users'),['pref'=>$pref])->withMembers($users)->withItems($items);
    }

    public function getProfile(){
        
        $id           =   Auth::user()->id;
        $companyid    =   Auth::user()->company;
        $manager      =   array();
        $distributor  =   array();
        $user         =   User::find($id);
        $adminuser    =   array();
        $state        =   DB::table('state')
                              ->select('id','state_name','state_value')
                              ->get();
        
        $distributor  = User::where(['user_role'=>AGENT,'company'=>$companyid,'manage_distributor'=>1])->orderBy('name')->get();
        $manager      = User::where(['user_role'=>AGENT,'company'=>$companyid])->orderBy('name')->get();
        
        // $under_contract = DB::select("select * from lead_status where status_name='Under Contract'")[0];
        // $verify_lease = DB::select("select * from lead_status where status_name='Verifying Lease'")[0];
        //echo "<pre>";print_r(Auth::user()->user_role); exit;
        
        if(Auth::user()->user_role==3 || Auth::user()->user_role==4){
            
            if($user->user_role==2){
                $under_contract = (!empty($user->under_contract)?$user->under_contract:'');
                $verify_lease   = (!empty($user->verify_lease)?$user->verify_lease:'');
                
                
            }else{
               $users =User::find($user->create_by_user);
                $under_contract = (!empty($users->under_contract)?$users->under_contract:'');
                $verify_lease   = (!empty($users->verify_lease)?$users->verify_lease:''); 
            }
            
           
            //echo $user->create_by_user; exit;
        }else{
            $under_contract = (!empty($user->under_contract)?$user->under_contract:'');
            $verify_lease   = (!empty($user->verify_lease)?$user->verify_lease:'');
        }

        $user_security_questions = DB::select("select *,security_question.question as questions from user_security_question INNER join security_question ON security_question.id=user_security_question.question where user_id='$id' ORDER BY RAND()");
        
        $limit =5;
        $condtion = '';
        if(count($user_security_questions)>0){
            
            $user_security_question = (json_decode(json_encode($user_security_questions), true)); 
            $idd = implode(',',array_column($user_security_question,'id'));
           
            $limit = $limit-count($user_security_question);
            $condtion = "where id NOT IN($idd)";
        }
        $security_questions = DB::select("select * from security_question ".$condtion." ORDER BY RAND() LIMIT $limit");
       
       $show_optional_fee=1;
        if(Auth::user()->user_role==1){
            $show_optional_fee=0;
        }
       // echo"<pre>"; print_r($verify_lease); exit;
        
        $mm = User::find(1);

        return view('user/edituser', compact('user','verify_lease','under_contract'),
          [
            'users'         =>  User::where('user_role','=',4)->get(),
            'userackdoc'    =>  User::find($id),
            'usersagent'    =>  User::where(['user_role'=>AGENT,'company'=>$companyid])->get(),
            'distributor'   =>  $distributor,
            'adminuser'     =>  $adminuser,
            'manager'       =>  $manager,
            'companys'      =>  Company::all(),
            'roles'         =>  Role::all(),
            'state'         =>  $state,
            'show_optional_fee'=>$show_optional_fee,
            'questions'     =>  $security_questions,
            'user_questions'=>  $user_security_questions
            
          ]);
    }

    public function updatepassword(Request $request){
        
        $id             = Auth::user()->id;
        $validatedData  = $request->validate([
                'old_password'      => 'required|min:8',
                'new_password'      => 'required|same:new_password|min:8',
                'confirm_password'  => 'required|same:new_password',
         
        ]);
        $count = 0;
        $questionString = implode(',', $request->question);

        $security_questions = DB::select("SELECT * FROM user_security_question WHERE user_id = '$id' AND FIND_IN_SET(question, '$questionString') > 0");

        foreach ($security_questions as $item) {
            if ($item->answer == $request->answer[$item->question]) {
                $count += 1;
            }
        }

        if($count == 2) {
            $data             = $request->input();
            $current_password = Auth::User()->password;           
            if(Hash::check($data['old_password'], $current_password)){    
                $user_id = Auth::User()->id;                     
                $obj_user = User::find($user_id);
                $obj_user->password = Hash::make($data['new_password']);
                $obj_user->show_password = $data['new_password'];
                $obj_user->save();
                
                $fetchedd_data =    DB::connection('spiritre_mysql')
                                        ->table('wp_users')
                                        ->where('user_crm_id', $id)
                                        ->first();

                if($fetchedd_data){

                  $spiritreuser_id  = $fetchedd_data->ID;
                  $updatedUser      = DB::connection('spiritre_mysql')
                                          ->table('wp_users')
                                          ->where('ID', $spiritreuser_id)
                                          ->update([
                                                    'user_pass' => md5($data['new_password'])
                                                  ]);
                }
                
                Session::flash('message', 'pwdchng');   
                Session::flash('alert-class', 'alert-success');  
                return view('user.changepassword'); 
            }else{
              Session::flash('message', 'pwdnotchng');   
              Session::flash('alert-class', 'alert-danger');
              return view('user.changepassword');   
            }    
        } else {
            Session::flash('message', 'sqerr');   
            Session::flash('alert-class', 'alert-danger');
            return view('user.changepassword'); 
        }
         
    }

    /**
    * Show the form for creating a new agent/user.
    * @params: request data
    * @return \Illuminate\Http\Response
    * @ModifiedBy: Chintesh k.
    */
    public function create(){    


      $id           =   Auth::user()->id;
      $companyid    =   Auth::user()->company; 
      $role_id      =   Auth::user()->user_role;
      $manager      =   array();
      $distributor  =   array();
      $adminuser    =   array();
      
      
      if(user_rights($role_id) == False){
        return redirect('/');
      }

      if(Auth::user()->user_role == SUPERADMIN){

        $roles        =   Role::all();
        $useragent    =   User::where(['user_role'=>AGENT])->orderBy('name')->get();
        $aruser       =   User::where('user_role','=',ARUSER)->orderBy('name')->get();
        $adminuser    =   User::where(['user_role'=>ADMIN])->orderBy('name')->get();
        $distrib      =   array();

      }else if(Auth::user()->user_role == ADMIN){

        $roles      =   Role::where('id','!=',SUPERADMIN)
                              //->where('id','!=',ADMIN)
                              ->where('role_status','=',1)
                              ->get();
        $useragent  =   User::where(['user_role'=>AGENT,'company'=>$companyid])
                              ->orderBy('name')
                              ->get();
        $aruser     =   User::where([
                                      'user_role'=>4,
                                      'company'=>$companyid
                                    ])
                              ->orderBy('name')
                              ->get();
        $distrib    =   User::where([
                                      'user_role'=>AGENT,
                                      'company'=>$companyid,
                                      'manage_distributor'=>1
                                    ])
                                ->orderBy('name')
                                ->get();

        $manager    =   User::where([
                                      'user_role'=>AGENT,
                                      'company'=>$companyid
                                    ])
                              ->orderBy('name')
                              ->get();
      }

      $usercompany  = Company::where('id',Auth::user()->company)->first();

      $state = DB::table('state')->select('id','state_name','state_value')->get(); 
      return view('auth.register',[
        'users'           =>  $aruser,
        'usersagent'      =>  $useragent,
        'distributor'     =>  $distrib,
        'manager'         =>  $manager,
        'adminuser'       =>  $adminuser,
        'companys'        =>  Company::where('company_type',1)->orderBy('mgmt_name')->get(),
        'roles'           =>  $roles,
        'state'           =>  $state,
        'usercompany'     =>  $usercompany,
      ]);
    }

    /**
    * Store a newly created resource in storage.
    *
    * @param  \Illuminate\Http\Request  $request
    * @return \Illuminate\Http\Response
    * @modifiedby:  chintesh k
    */
    
    public function check_email_exist(Request $request){
        $email = $_REQUEST['email'];
        if(!empty($email)){
            $exist = DB::select("select * from users where email='$email'");
           $is_exist= count($exist);
            
        }else{
            $is_exist=0;
        }
        return $is_exist; exit;
        //print_r($_REQUEST); exit;
    }
    public function store(Request $request){
        //dd($request->all());
      $data           = $request->input();
      $validatedData  = $request->validate([
           'name'         => 'required|max:255',
           'last_name'    => 'required|max:255',
           'phone'        => 'required|max:15',
           'user_role'    => 'required|max:15',
           'email'        => 'required|unique:users|max:255',
           'password'     => 'required|confirmed|min:8',   
      ]); 
       
      if(isset($data['lead_source_access_to_gent']) && $data['lead_source_access_to_gent'] != ''){
         $lead_source_access_to_gent = implode(",",$data['lead_source_access_to_gent']);
      }else{
        $lead_source_access_to_gent = 0;
      }
      if(isset($data['agents_to_manager']) && $data['agents_to_manager'] != ''){ 
        $agents_to_manager = implode(",",$data['agents_to_manager']);
      }else{
        $agents_to_manager = 0;
      }

      $RealeStateLicense = '';
      $WebsiteAddress    = ''; 

      if(isset($data['company'])){
        $company            =     $data['company'];
        $RealeStateLicense  =     $data['RealeStateLicense'];
        $WebsiteAddress     =     $data['WebsiteAddress'];
        $create_by_user     =     Auth::User()->id;
      }else{
        if(Auth::user()->user_role == SUPERADMIN && $data['user_role']==4){
          if(isset($data['assign_to_ad']) && $data['assign_to_ad']!='' && $data['assign_to_ad']!=0){
              $company          = User::find($data['assign_to_ad'])->company;
              $create_by_user   =   $data['assign_to_ad'];
          }else{
            $company            = Auth::User()->company;
            $create_by_user     = Auth::User()->id;
          }
        }elseif(Auth::user()->user_role==SUPERADMIN && $data['user_role']==3){

          if(isset($data['assign_to_ar']) && $data['assign_to_ar']!='' && $data['assign_to_ar']!=0){

              $company            =     User::find($data['assign_to_ar'])->company;
              $create_by_user     =     User::find($data['assign_to_ar'])->create_by_user;
          }else{
            $company              =     Auth::User()->company;
            $create_by_user       =     Auth::User()->id;
          }
        }else{
          $company                =     Auth::User()->company;
          $create_by_user         =     Auth::User()->id;
        }   
      }

      $user   = new User();
      if(isset($data['view_lead_market'])){
        $user->view_lead_market  = $data['view_lead_market'];
      }

      $user->name                       =   $data['name'];
      $user->email                      =   $data['email'];
      $user->password                   =   Hash::make($data['password']);
      $user->last_name                  =   $data['last_name'];
      $user->status                     =   $data['status'];
      $user->gender                     =   isset($data['gender']) ? $data['gender'] : '';
      $user->phone                      =   $data['phone'];
      $user->fax                        =   $data['fax'];
      $user->address                    =   $data['address'];
      $user->city                       =   $data['city'];
      $user->state                      =   $data['state'];
      $user->zip                        =   $data['zip'];
      $user->daily_lead_max             =   $data['daily_lead_max'];
      $user->invoicing_cost             =   $data['invoicing_cost'];
      $user->broker_cost                =   $data['broker_cost'];
      $user->unit                       =   $data['unit'];
      $user->user_role                  =   $data['user_role'];
      $user->assign_to_ar               =   isset($data['assign_to_ar'])?($data['assign_to_ar']):0;
      $user->agents_to_manager          =   $agents_to_manager;
      $user->lead_source_access_to_gent =   $lead_source_access_to_gent;
      $user->manage_distributor         =   $data['manage_distributor'];
      $user->manage_manager             =   $data['manage_manager'];
      $user->remember_token             =   $data['_token'];
      $user->agent_cell                 =   $data['agent_cell'];
      $user->company                    =   $company;
      $user->RealeStateLicense          =   $RealeStateLicense;
      $user->WebsiteAddress             =   $WebsiteAddress;
      $user->create_by_user             =   $create_by_user;
      $user->create_by_role             =   Auth::User()->role_id;
      $user->show_password              =   $data['password'];
      $user->commercial_tier1           =   $data['commercial_tier1'] ?? 0;
      $user->commercial_tier2           =   $data['commercial_tier2'] ?? 0;
      $user->commercial_tier3           =   $data['commercial_tier3'] ?? 0;

      if(!empty( $data['class1'])){
        $user->class1                   =   $data['class1'];
        $user->al_invoicing_cost        =   isset($data['al_invoicing_cost']) ? $data['al_invoicing_cost'] : $data['invoicing_cost'];
        $user->al_broker_cost           =   isset($data['al_broker_cost'])  ? $data['al_broker_cost'] : $data['broker_cost'];
        $user->al_unit                  =   isset($data['al_unit'])  ? $data['al_unit'] : $data['unit'];
      }else{
        $user->class1 = "";
        $user->al_invoicing_cost        =   $data['invoicing_cost'];
        $user->al_broker_cost           =   $data['broker_cost'];
        $user->al_unit                  =   $data['unit'];
      }

      if(!empty($data['class2'])){
        $user->class2                  =   $data['class2'];
        $user->rl_invoicing_cost       =   isset($data['rl_invoicing_cost']) ? $data['rl_invoicing_cost'] : $data['invoicing_cost'];
        $user->rl_broker_cost          =   isset($data['rl_broker_cost'])  ? $data['rl_broker_cost'] : $data['broker_cost'];
        $user->rl_unit                 =   isset($data['rl_unit'])  ? $data['rl_unit'] : $data['unit'];
      }else{
        $user->class2                  = "";
        $user->rl_invoicing_cost       =   $data['invoicing_cost'];
        $user->rl_broker_cost          =   $data['broker_cost'];
        $user->rl_unit                 =   $data['unit'];
      }

      if(!empty($data['class3'])){
        $user->class3                  =   $data['class3'];
        $user->rs_invoicing_cost       =   isset($data['rs_invoicing_cost']) ? $data['rs_invoicing_cost'] : $data['invoicing_cost'];
        $user->rs_broker_cost          =   isset($data['rs_broker_cost'])  ? $data['rs_broker_cost'] : $data['broker_cost'];
        $user->rs_unit                 =   isset($data['rs_unit'])  ? $data['rs_unit'] : $data['unit'];
      }else{
        $user->class3 = "";
        $user->rs_invoicing_cost       =   $data['invoicing_cost'];
        $user->rs_broker_cost          =   $data['broker_cost'];
        $user->rs_unit                 =   $data['unit'];
      }

      if(!empty( $data['class4'])){
        $user->class4                  =   $data['class4'];
        $user->cl_invoicing_cost       =   isset($data['cl_invoicing_cost']) ? $data['cl_invoicing_cost'] : $data['invoicing_cost'];
        $user->cl_broker_cost          =   isset($data['cl_broker_cost'])  ? $data['cl_broker_cost'] : $data['broker_cost'];
        $user->cl_unit                 =   isset($data['cl_unit'])  ? $data['cl_unit'] : $data['unit'];
        $user->cl_commercial_tier1     =   isset($data['cl_commercial_tier1']) ? $data['cl_commercial_tier1'] : 0;
        $user->cl_commercial_tier2     =   isset($data['cl_commercial_tier2']) ? $data['cl_commercial_tier2'] : 0;
        $user->cl_commercial_tier3     =   isset($data['cl_commercial_tier3']) ? $data['cl_commercial_tier3'] : 0;
      }else{
        $user->class4 = "";
        $user->cl_invoicing_cost       =   $data['invoicing_cost'];
        $user->cl_broker_cost          =   $data['broker_cost'];
        $user->cl_unit                 =   $data['commercial_tier1'] ?? 0;
        $user->cl_commercial_tier2     =   $data['commercial_tier2'] ?? 0;
        $user->cl_commercial_tier3     =   $data['commercial_tier3'] ?? 0;
      }

      if(!empty( $data['class5'])){
        $user->class5                  =   $data['class5'];
        $user->cs_invoicing_cost       =   isset($data['cs_invoicing_cost']) ? $data['cs_invoicing_cost'] : $data['invoicing_cost'];
        $user->cs_broker_cost          =   isset($data['cs_broker_cost'])  ? $data['cs_broker_cost'] : $data['broker_cost'];
        $user->cs_unit                 =   isset($data['cs_unit'])  ? $data['cs_unit'] : $data['unit'];
        $user->cs_commercial_tier1     =   isset($data['cs_commercial_tier1']) ? $data['cs_commercial_tier1'] : 0;
        $user->cs_commercial_tier2     =   isset($data['cs_commercial_tier2']) ? $data['cs_commercial_tier2'] : 0;
        $user->cs_commercial_tier3     =   isset($data['cs_commercial_tier3']) ? $data['cs_commercial_tier3'] : 0;
      }else{
        $user->class5 = "";
        $user->cs_invoicing_cost       =   $data['invoicing_cost'];
        $user->cs_broker_cost          =   $data['broker_cost'];
        $user->cs_unit                 =   $data['commercial_tier1'] ?? 0;
        $user->cs_commercial_tier2     =   $data['commercial_tier2'] ?? 0;
        $user->cs_commercial_tier3     =   $data['commercial_tier3'] ?? 0;
      }

      if(!empty($data['class6'])) {
        $user->class6                  =   $data['class6'];
      } else {
        $user->class6                  =   "";
      }
      
      
        $user->w9files = (!empty($data['w9files'])?$data['w9files']:'');
        // dd($user);
      if($user->save())
      {


        /* Spiritre User Data */
        
        if($data['user_role']==3){

            if($_SERVER['SERVER_NAME'] == 'development.realm.clientmgr.us' || $_SERVER['SERVER_NAME'] == 'realm.clientmgr.us'){
              $create_from = 'realM';
            }else{
              $create_from = 'clientMGR';
            }
    
            $spiritre_user_login          = $data['name'].$data['last_name'].$user->id;
            $spiritre_user_email          = trim($data['email']);
            $spiritre_user_pass           = md5($data['password']);
            $spiritre_created_by          = $create_by_user;
            $spiritre_created_from        = $create_from;
            $spiritre_user_role           = $data['user_role'];
            $spiritre_user_registered     = date('Y-m-d h:i:s');
            $spiritre_user_activation_key = Hash::make($data['email']);
            $spiritre_user_status         = 1;
            $spiritre_display_name        = $data['name'].' '.$data['last_name'];
            $spiritre_user_nicename       = $data['name'].' '.$data['last_name'];
            $spiritre_user_url            = 'https://spiritre.com/';
    
            $created_user_id = DB::connection('spiritre_mysql')
                                    ->table('wp_users')
                                    ->insertGetId([
                                'user_crm_id'         =>  $user->id, 
                                'user_login'          =>  $spiritre_user_login,
                                'user_email'          =>  $spiritre_user_email,
                                'user_pass'           =>  $spiritre_user_pass,
                                'created_by'          =>  $spiritre_created_by,
                                'created_from'        =>  $spiritre_created_from,
                                'user_role'           =>  $spiritre_user_role,
                                'user_registered'     =>  $spiritre_user_registered,
                                'user_activation_key' =>  $spiritre_user_activation_key,
                                'user_status'         =>  $spiritre_user_status,
                                'display_name'        =>  $spiritre_display_name,
                                'user_nicename'       =>  $spiritre_user_nicename,
                                'user_url'            =>  $spiritre_user_url,
                              ]);
                
            $capabilities     = serialize(array("contributor"=> 1));
                
            $create_meta_data = DB::connection('spiritre_mysql')
                                    ->table('wp_usermeta')
                                    ->insert([
                                      'user_id'     =>  $created_user_id, 
                                      'meta_key'    =>  'wp_capabilities', 
                                      'meta_value'  =>  $capabilities
                                    ]);

            $create_metadata  = DB::connection('spiritre_mysql')
                                    ->table('wp_usermeta')
                                    ->insert([
                                      'user_id'     =>  $created_user_id, 
                                      'meta_key'    =>  'wp_user_level', 
                                      'meta_value'  =>  1
                                    ]);
            
        }
        /* Spiritre User Data */

        Session::flash('message', 'uc');   
        Session::flash('alert-class', 'alert-success');
      }else{
        Session::flash('message', 'notc');   
        Session::flash('alert-class', 'alert-danger');
      } 
      return redirect('/users');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
    }

    /**
     * Show the form for editing the specified resource.
     * @param  int  $id
     * @return \Illuminate\Http\Response
     * @modifiedby: Chintesh k
     */
    public function edit($id){

    $user_id= $id;
      $user         =   User::find($id);
      $companyid    =   Auth::user()->company;
      $user_role    =   Auth::user()->user_role;
      $id           =   Auth::user()->id;

      $manager      =   array();
      $distributor  =   array();
      $useragent    =   array();
      $adminuser    =   array();
      $aruser       =   array();
      
      if((Auth::user()->user_role != SUPERADMIN) && (Auth::user()->user_role != ADMIN)){
          return redirect('/'); 
      }
      
      
    // $under_contract = DB::select("select * from lead_status where status_name='Under Contract'")[0];
    // $verify_lease = DB::select("select * from lead_status where status_name='Verifying Lease'")[0];
    
     
        
      if(Auth::user()->user_role == SUPERADMIN){

        $roles            =   Role::all();
        $companyid        =   $user->company;
        $useragent        =   User::where(['user_role'=>AGENT]);
        $useragent        =   $useragent->where('id','!=',$user->id)->get();
        $adminuser        =   User::where(['user_role'=>ADMIN])->get();

        $distributor      =   User::where([
                                            'user_role'=>AGENT,
                                            'company'=>$companyid,
                                            'manage_distributor'=>1
                                          ])
                                    ->orderBy('name')
                                    ->get();
        $manager          =   User::where([
                                            'user_role'=>AGENT,
                                            'company'=>$companyid
                                          ])
                                    ->orderBy('name')
                                    ->get();
        $aruser           = User::where(['user_role'=> 4])->orderBy('name','ASC')->get();
      }else if(Auth::user()->user_role == ADMIN){
        
         //DB::enableQueryLog();
        $roles        =   Role::where('id','!=',SUPERADMIN)
                                ->where('id','!=',ADMIN)
                                ->where('role_status','=',1)
                                ->get();
                                
                 //dd(DB::getQueryLog()); 
                                
                                
        $useragent    =   User::where([
                                      'user_role'=>AGENT,
                                      'company'=>$companyid
                                    ]);
        $useragent    =   $useragent->where('id','!=',$user->id)
                                    ->orderBy('name')
                                    ->get();
        $distributor  =   User::where([
                                        'user_role'=>AGENT,
                                        'company'=>$companyid,
                                        'manage_distributor'=>1
                                      ])
                                ->orderBy('name')
                                ->get();
        $manager      =   User::where([
                                        'user_role'=>AGENT,
                                        'company'=>$companyid
                                      ])
                                ->orderBy('name','ASC')
                                ->orderBy('name')
                                ->get();
        $aruser       =   User::where(['user_role'=> 4,'company'=>$companyid])
                                ->orderBy('name','ASC')
                                ->get();
      }
      if($user_role == ADMIN && $id != $user->created_by_user){
          if($companyid != $user->company){
            Session::flash('message', "right");   
            Session::flash('alert-class', 'alert-danger');
            return redirect('users');
          } 
      }

      $state    = DB::table('state')->select('id','state_name','state_value')->get();
      
      
      
      if((Auth::user()->user_role == SUPERADMIN)){
         
         
            $under_contract = (!empty($user->under_contract)?$user->under_contract:'');
            $verify_lease   = (!empty($user->verify_lease)?$user->verify_lease:'');
    
     }else{
         
            if($user->user_role==2){
                $under_contract = (!empty($user->under_contract)?$user->under_contract:'');
                $verify_lease   = (!empty($user->verify_lease)?$user->verify_lease:'');
                
                
            }else{
               $users =User::find($user->create_by_user);
                $under_contract = (!empty($users->under_contract)?$users->under_contract:'');
                $verify_lease   = (!empty($users->verify_lease)?$users->verify_lease:''); 
            }
         
        // $users = User::find($user->create_by_user);
         
        // $under_contract = (!empty($users->under_contract)?$users->under_contract:'');
        // $verify_lease  = (!empty($users->verify_lease)?$users->verify_lease:'');
     }
     
        $user_security_questions = DB::select("select *,security_question.question as questions from user_security_question INNER join security_question ON security_question.id=user_security_question.question where user_id='$user_id' ORDER BY RAND()");
        
        
        
        $limit =5;
        $condtion = '';
        if(count($user_security_questions)>0){
            
            $user_security_question = (json_decode(json_encode($user_security_questions), true)); 
            $idd = implode(',',array_column($user_security_question,'id'));
           
            $limit = $limit-count($user_security_question);
            $condtion = "where id NOT IN($idd)";
        }
        
        $security_questions = DB::select("select * from security_question ".$condtion." ORDER BY RAND() LIMIT $limit");
        
                if(last(request()->segments())=='profile'){
                    $id= Auth::user()->id;
                }else{
                    $id= last(request()->segments());
                }
     
      // $security_questions = [];
        //$user_security_questions = [];
        $show_optional_fee=1;
      return view('user/edituser',  compact('user','verify_lease','under_contract'),[
        'users'         =>  $aruser,
        'userackdoc'    =>  User::find($id),
        'usersagent'    =>  $useragent,
        'adminuser'     =>  $adminuser,
        'distributor'   =>  $distributor,
        'manager'       =>  $manager,
        'companys'      =>  Company::where('company_type',1)->orderBy('mgmt_name')->get(),
        'roles'         =>  $roles, // Role::all(),
        'state'         =>  $state,
        'show_optional_fee'=>$show_optional_fee,
        'id'=>$id,
        'questions'     =>  $security_questions,
        'user_questions'=>  $user_security_questions,
        'edit_user' =>1
      ]);
    }

    /**
    * Update the specified resource in storage.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  int  $id
    * @return \Illuminate\Http\Response
    * @modifiedby: chintesh k.
    */
    public function update(Request $request){

        $id       = $request['id'];
        $data     = $request->input();
        
        // if(empty($data['edit_user'])){
        //       echo "<pre>";print_r($data); exit;
        // }
    //echo "<pre>";print_r($data); exit;
    
    //echo Auth::user()->user_role;
    //die
        if(!empty($data['squestion']))
        {
             
          $questions = (!empty($data['sanswer'])?count($data['sanswer']):'');
          $total_question = (count(array_filter($data['sanswer'], function($x) { return !empty($x); })));
          
            if($total_question<5 && Auth::user()->user_role !== 2 && Auth::user()->user_role !== 1){
              $error=1;
              $question_answer = "'Please answer of 5 Security question.";
              
               
              
                    Session::flash('question_answer', $question_answer); 
              
                    return back()->with('error',"Please answer of 5 Security question.");
               
              
             
            }else{
                DB::delete('delete from user_security_question where user_id = ?',[$id]);
                $date = date('Y-m-d H:i:s');
                
                for($i=0;$i<count($data['squestion']);$i++){
                    if(!empty($data['sanswer'][$i])){
                        $question = $data['squestion'][$i];
                        $answer = $data['sanswer'][$i];
                        DB::insert('insert into user_security_question (user_id, question,answer,created_at,updated_at) values (?, ?,?,?,?)', [$id, $question,$answer,$date,$date]); 
                    }
                }
                
                $error=0;
                $question_answer = "";
               Session::flash('question_answer', $question_answer); 
            }
        }
        
        
      foreach ($data as $key => $valuedata) {
        if($key !=  '_token' && $key !=  'checagentemail' && $key !=  'img_file' && $key !=  'docurl' && $key != 'old_status'){
          $user[$key] = $valuedata;
        }
        if($key == 'password'){
          $user[$key] = Hash::make($valuedata); 
        }
      }
   
      if(isset($data['lead_source_access_to_gent']) && $data['lead_source_access_to_gent'] != ''){
        $lead_source_access_to_gent = implode(",",$data['lead_source_access_to_gent']);
      }else{
        $lead_source_access_to_gent = 0;
      }

      if(isset($data['agents_to_manager']) && $data['agents_to_manager'] != ''){ 
       $agents_to_manager = implode(",",$data['agents_to_manager']);
      }else{
       $agents_to_manager = 0;
      }

      $RealeStateLicense = '';
      $WebsiteAddress    = '';
        $RealeStateLicense  =   (!empty($data['RealeStateLicense'])?$data['RealeStateLicense']:'');
      if(isset($data['company'])){
          $company            =   $data['company'];
          $RealeStateLicense  =   $data['RealeStateLicense'];
          $WebsiteAddress     =   $data['WebsiteAddress'];
          $create_by_user     =   Auth::User()->id;
      }else{
          if(Auth::user()->user_role == SUPERADMIN && User::find($request['id'])->user_role == SUPERADMIN){
             $company           =     Auth::User()->company;
             $create_by_user    =     Auth::User()->id;
          }else{

            if(Auth::user()->user_role == SUPERADMIN && $data['user_role'] == 4 && User::find($request['id'])->user_role != SUPERADMIN){

              if(isset($data['assign_to_ad']) && $data['assign_to_ad'] != '' && $data['assign_to_ad'] != 0){
                 $company           = User::find($data['assign_to_ad'])->company;
                 $create_by_user    = $data['assign_to_ad'];
              }else{
                $company            = Auth::User()->company;
                $create_by_user     = Auth::User()->id;
              }
            }elseif(Auth::user()->user_role == SUPERADMIN && $data['user_role'] == 3 && User::find($request['id'])->user_role != SUPERADMIN){

              if(isset($data['assign_to_ar']) && $data['assign_to_ar'] != '' && $data['assign_to_ar']!= 0){

                $company             = User::find($data['assign_to_ar'])->company;
                $create_by_user      = User::find($data['assign_to_ar'])->create_by_user;
              }else{
                $company              =   Auth::User()->company;
                $create_by_user       =   Auth::User()->id;
              }
            }else{
              $company                =   Auth::User()->company;
              $create_by_user         =   Auth::User()->id;
            }  
          }
      }
        $under_contract  =   (!empty($data['under_contract'])?$data['under_contract']:'');
        $verify_lease  =   (!empty($data['verify_lease'])?$data['verify_lease']:'');
        
     
        
        
        unset($user['login_role_id']);
        unset($user['assign_to_ad']);
        
        unset($user['under_contract']);
        unset($user['verify_lease']);
        
        unset($user['sanswer']);
        unset($user['squestion']);
        unset($user['edit_user']);
     
      if(isset($data['view_lead_market'])){
        $user['view_lead_market']         =  $data['view_lead_market'];
      }

      $user['agents_to_manager']          =   $agents_to_manager;
      $user['lead_source_access_to_gent'] =   $lead_source_access_to_gent;
      $user['company']                    =   $company;
      $user['RealeStateLicense']          =   $RealeStateLicense;
      $user['WebsiteAddress']             =   $WebsiteAddress;
      $user['show_password']              =   $data['password'];
      $user['gender']                     =   isset($data['gender']) ? $data['gender'] : '';
      
      
       
       
       if(Auth::user()->user_role == SUPERADMIN || Auth::user()->user_role == ADMIN){
           
              $RealeStateLicense  =   (!empty($data['RealeStateLicense'])?$data['RealeStateLicense']:'');
              
              
              
            if(!empty($data['w9files'])){
               $user['w9files'] =   $data['w9files']; 
            }else{
                $user['w9files'] =   0;
            } 
              
      
      
      if(!empty( $data['class1'])){
        $user['class1']                   =   $data['class1'];
        $user['al_invoicing_cost']        =   isset($data['al_invoicing_cost']) ? $data['al_invoicing_cost'] : $data['invoicing_cost'];
        $user['al_broker_cost']          =   isset($data['al_broker_cost'])  ? $data['al_broker_cost'] : $data['broker_cost'];
        $user['al_unit']                  =   isset($data['al_unit'])  ? $data['al_unit'] : $data['unit'];
      }else{
        $user['class1'] = "";
        $user['al_invoicing_cost']       =   $data['invoicing_cost'];
        $user['al_broker_cost']          =   $data['broker_cost'];
        $user['al_unit']                 =   $data['unit'];
      }

      if(!empty( $data['class2'])){
        $user['class2']                  =   $data['class2'];
        $user['rl_invoicing_cost']       =   isset($data['rl_invoicing_cost']) ? $data['rl_invoicing_cost'] : $data['invoicing_cost'];
        $user['rl_broker_cost']          =   isset($data['rl_broker_cost'])  ? $data['rl_broker_cost'] : $data['broker_cost'];
        $user['rl_unit']                 =   isset($data['rl_unit'])  ? $data['rl_unit'] : $data['unit'];
      }else{
        $user['class2'] = "";
        $user['rl_invoicing_cost']       =   $data['invoicing_cost'];
        $user['rl_broker_cost']          =   $data['broker_cost'];
        $user['rl_unit']                 =   $data['unit'];
      }

      if(!empty($data['class3'])){
        $user['class3']                  =   $data['class3'];
        $user['rs_invoicing_cost']       =   isset($data['rs_invoicing_cost']) ? $data['rs_invoicing_cost'] : $data['invoicing_cost'];
        $user['rs_broker_cost']         =   isset($data['rs_broker_cost'])  ? $data['rs_broker_cost'] : $data['broker_cost'];
        $user['rs_unit']                 =   isset($data['rs_unit'])  ? $data['rs_unit'] : $data['unit'];
      }else{
        $user['class3'] = "";
        $user['rs_invoicing_cost']       =   $data['invoicing_cost'];
        $user['rs_broker_cost']          =   $data['broker_cost'];
        $user['rs_unit']                 =   $data['unit'];
      }

      if(!empty( $data['class4'])){
        $user['class4']                  =   $data['class4'];
        $user['cl_invoicing_cost']       =   isset($data['cl_invoicing_cost']) ? $data['cl_invoicing_cost'] : $data['invoicing_cost'];
        $user['cl_broker_cost']          =   isset($data['cl_broker_cost'])  ? $data['cl_broker_cost'] : $data['broker_cost'];
        $user['cl_unit']                 =   isset($data['cl_unit'])  ? $data['cl_unit'] : $data['unit'];
        $user['cl_commercial_tier1']     =   isset($data['cl_commercial_tier1']) ? $data['cl_commercial_tier1'] : 0;
        $user['cl_commercial_tier2']     =   isset($data['cl_commercial_tier2']) ? $data['cl_commercial_tier2'] : 0;
        $user['cl_commercial_tier3']     =   isset($data['cl_commercial_tier3']) ? $data['cl_commercial_tier3'] : 0;
      }else{
        $user['class4'] = "";
        $user['cl_invoicing_cost']       =   $data['invoicing_cost'];
        $user['cl_broker_cost']          =   $data['broker_cost'];
        $user['cl_unit']                 =   $data['unit'];
        $user['cl_commercial_tier1']     =   $data['commercial_tier1'] ?? 0;
        $user['cl_commercial_tier2']     =   $data['commercial_tier2'] ?? 0;
        $user['cl_commercial_tier3']     =   $data['commercial_tier3'] ?? 0;
      }
      if(!empty( $data['class5'])){
        $user['class5']                  =   $data['class5'];
        $user['cs_invoicing_cost']       =   isset($data['cs_invoicing_cost']) ? $data['cs_invoicing_cost'] : $data['invoicing_cost'];
        $user['cs_broker_cost']          =   isset($data['cs_broker_cost'])  ? $data['cs_broker_cost'] : $data['broker_cost'];
        $user['cs_unit']                 =   isset($data['cs_unit'])  ? $data['cs_unit'] : $data['unit'];
        $user['cs_commercial_tier1']     =   isset($data['cs_commercial_tier1']) ? $data['cs_commercial_tier1'] : 0;
        $user['cs_commercial_tier2']     =   isset($data['cs_commercial_tier2']) ? $data['cs_commercial_tier2'] : 0;
        $user['cs_commercial_tier3']     =   isset($data['cs_commercial_tier3']) ? $data['cs_commercial_tier3'] : 0;
      }else{
         $user['class5'] = "";
        $user['cs_invoicing_cost']       =   $data['invoicing_cost'];
        $user['cs_broker_cost']          =   $data['broker_cost'];
        $user['cs_unit']                 =   $data['unit'];
        $user['cs_commercial_tier1']     =   $data['commercial_tier1'] ?? 0;
        $user['cs_commercial_tier2']     =   $data['commercial_tier2'] ?? 0;
        $user['cs_commercial_tier3']     =   $data['commercial_tier3'] ?? 0;
      }
      if(!empty( $data['class6'])){
        $user['class6']                  =   $data['class6'];
      }else{
         $user['class6'] = "";
      }
      
      
       }else{
           if(!empty($data['w9files'])){
               $user['w9files'] =   $data['w9files']; 
            }
       }

       // Status update for dormant user 11th Sept 2023
       if($data['old_status'] == 2 && $data['old_status'] != $data['status'])
       {
         $user['last_login_date']    = date('Y-m-d H:i:s');
       }
       //end
      
      
    $user['under_contract']     =   (!empty($under_contract)?$under_contract:0);
    $user['verify_lease']       =   (!empty($verify_lease)?$verify_lease:0);
     // dd($user);

    if(isset($data['is_ackdoc_reviewed']) && $data['is_ackdoc_reviewed'] == 1) {
        $user['is_ackdoc_reviewed'] = 1;
    } else {
        $user['is_ackdoc_reviewed'] = 0;
    } 
     
    $updateuser    =    User::where('id', $id)->update($user);
    $fetchedd_data =    DB::connection('spiritre_mysql')
                          ->table('wp_users')
                          ->where('user_crm_id', $id)
                          ->first();

      if($fetchedd_data){

        $spiritreuser_id  = $fetchedd_data->ID;
        $nicename         = $data['name'].' '.$data['last_name'];
        $updatedUser      = DB::connection('spiritre_mysql')
                            ->table('wp_users')
                            ->where('ID', $spiritreuser_id)
                            ->update([
                              'user_login'     => $data['name'].$data['last_name'].$id,
                              'user_nicename'  => $nicename,
                              'display_name'   => $nicename,
                              'user_email'     => trim($data['email']),
                              'user_pass'      => md5($data['password'])
                            ]);
      }

      if($updateuser){
      
        Session::flash('message', 'uu');   
        Session::flash('alert-class', 'alert-success');  
      }else{
        Session::flash('message', 'notu');   
        Session::flash('alert-class', 'alert-danger');
      } 

      if($id == Auth::user()->id){
        return redirect('/profile');
      }else{
        return redirect('/edituser/'.$id);
      }
    }


      /**
      * Remove the specified resource from storage.
      *
      * @param  int  $id
      * @return \Illuminate\Http\Response
      */
    public function destroy($id){
          
        $istru = DB::table("users")->delete($id);
        if($istru){
          Session::flash('message', 'Your Record Deleted Successfully.');   
          Session::flash('alert-class', 'alert-success');  
        }else{

          Session::flash('message', 'Record not Deleted!');   
          Session::flash('alert-class', 'alert-danger');
        } 
        return redirect('/users');
      }
      
      public function checagentemail(Request $request){
        
        $email  = $request->input('email');
        $id     = $request->input('id');

        if($id == 0){
          $getuser = User::where(['email'=>$email])
                          ->get()
                          ->first();
        }else{
          $getuser = User::where(['email'=>$email])
                          ->where('id','!=',$id)
                          ->get()
                          ->first();
        }
       
        if(isset($getuser['email']) && $getuser['email'] != ''){
          $data['res'] = 'failed';
        }else{
          $data['res'] = 'success';
        }
        echo  json_encode($data);
      }

      /*
      * Function : agentsearch
      * @param: Request data
      * @output: Json search data
      */
      public function agentsearch(Request $request){
          
        $pref     =   session('agentSearchPrefrence');
        $ser      =   $request->input('inputVal'); 
        $role     =   Auth::user()->user_role;
        $id       =   Auth::user()->id;
        
        
        
        if($role == ARUSER){

            $students = \DB::select("select CONCAT(fname) As result from lead_client INNER JOIN users ON users.id=lead_client.agent_id where fname LIKE '".$ser."%' AND users.assign_to_ar=".$id."UNION select CONCAT(lname) As result from lead_client INNER JOIN users ON users.id=lead_client.agent_id where lname LIKE '".$ser."%' AND users.assign_to_ar=".$id."UNION select CONCAT(lead_client.email) As result from lead_client INNER JOIN users ON users.id=lead_client.agent_id where lead_client.email LIKE '".$ser."%' AND users.assign_to_ar=".$id."UNION select CONCAT(curr_status) As result from lead_client INNER JOIN users ON users.id=lead_client.agent_id where curr_status LIKE '".$ser."%' AND users.assign_to_ar=".$id."UNION select CONCAT(property.prop_name) As result from property INNER JOIN lead_client ON lead_client.prop_id =property.id INNER JOIN users ON users.id=lead_client.agent_id WHERE property.prop_name LIKE '".$ser."%' AND users.assign_to_ar=".$id."UNION select CONCAT(property.prop_phone) As result from property INNER JOIN lead_client ON lead_client.prop_id =property.id INNER JOIN users ON users.id=lead_client.agent_id WHERE property.prop_phone LIKE '".$ser."%' AND users.assign_to_ar=".$id."UNION select CONCAT(house_add) As result from lead_client INNER JOIN users ON users.id=lead_client.agent_id where house_add LIKE '".$ser."%' AND assign_to_ar=".$id."UNION select CONCAT(title_phone) As result from lead_client INNER JOIN users ON users.id=lead_client.agent_id where title_phone LIKE '".$ser."%' AND users.assign_to_ar=".$id."UNION select CONCAT(title_officer) As result from lead_client INNER JOIN users ON users.id=lead_client.agent_id where title_officer LIKE '".$ser."%' AND users.assign_to_ar=".$id." ORDER BY result ASC"); 
        }elseif($role == SUPERADMIN){
    	
         	if($pref == 'company'){
    		    $students = \DB::select("SELECT CONCAT(mgmt_name) As result from company where mgmt_name LIKE '".$ser."%' AND company_type=1 GROUP BY mgmt_name ORDER BY result ASC"); 
         	}else if($pref == 'role_name'){
    		    $students = \DB::select("SELECT CONCAT(role_name) As result from role WHERE role_name LIKE '".$ser."%' GROUP BY ".$pref." ORDER BY result ASC"); 
         	}else if($pref == 'name'){
    		    $students = \DB::select("SELECT CONCAT(name) As result from users WHERE name LIKE '".$ser."%' GROUP BY ".$pref." ORDER BY result ASC"); 
         	}else if($pref == 'last_name'){
    		    $students = \DB::select("SELECT CONCAT(last_name) As result from users WHERE last_name LIKE '".$ser."%' GROUP BY ".$pref." ORDER BY result ASC"); 
         	}else if($pref == 'phone'){
            $students = \DB::select("SELECT CONCAT(phone) As result from users WHERE phone LIKE '".preg_replace("/[^0-9.]/", "", $ser)."%' GROUP BY ".$pref." ORDER BY result ASC"); 
          }else{
    		    $students = \DB::select("SELECT CONCAT(".$pref.") AS result from users WHERE ".$pref." LIKE '".$ser."%' AND id != 1 GROUP BY ".$pref." ORDER BY result ASC"); 
         	}
        }elseif($role == ADMIN){
	//echo $pref; exit;
         	if($pref == 'company'){
    		    $students = \DB::select("SELECT CONCAT(mgmt_name) As result from company where mgmt_name LIKE '".$ser."%' AND company_type=1 GROUP BY mgmt_name ORDER BY result ASC"); 
         	}else if($pref == 'role_name'){
    		    $students = \DB::select("SELECT CONCAT(role_name) As result from role WHERE role_name LIKE '".$ser."%' GROUP BY ".$pref." ORDER BY result ASC"); 
         	}else if($pref == 'name'){
    		    $students = \DB::select("SELECT CONCAT(name) As result from users WHERE name LIKE '%".$ser."%' GROUP BY ".$pref." ORDER BY result ASC"); 
         	}else if($pref == 'phone'){
    		    $students = \DB::select("SELECT CONCAT(phone) As result from users WHERE phone LIKE '%".preg_replace("/[^0-9.]/", "", $ser)."%' GROUP BY ".$pref." ORDER BY result ASC"); 
         	}else if($pref == 'agent_cell'){
    		    $students = \DB::select("SELECT CONCAT(agent_cell) As result from users WHERE agent_cell LIKE '%".$ser."%' GROUP BY ".$pref." ORDER BY result ASC"); 
         	}else if($pref == 'last_name'){
    		    $students = \DB::select("SELECT CONCAT(last_name) As result from users WHERE last_name LIKE '".$ser."%' GROUP BY ".$pref." ORDER BY result ASC"); 
         	}elseif($pref == 'myone' || $pref == ''){
    		    $students = \DB::select("SELECT CONCAT(last_name,name) AS result from users WHERE last_name LIKE '".$ser."%' OR name LIKE '".$ser."%' AND id != 1 ORDER BY result ASC"); 
         	}elseif($pref == 'city'){
    		    $students = \DB::select("SELECT CONCAT(city) AS result from users WHERE city LIKE '".$ser."%' AND id != 1 GROUP BY city ORDER BY result ASC"); 
         	}
         	
        }else{

          $students = \DB::select("SELECT CONCAT(name) As result from users WHERE name LIKE '".$ser."%' AND users.create_by_user=".$id." UNION select CONCAT (last_name) AS result from users where last_name LIKE '".$ser."%' AND users.create_by_user=".$id." UNION SELECT CONCAT(email) As result from users WHERE email LIKE '".$ser."%' AND users.create_by_user=".$id." UNION SELECT CONCAT(city) As result from users WHERE city LIKE '".$ser."%' AND users.create_by_user=".$id." UNION SELECT CONCAT(phone) As result from users WHERE phone LIKE '%".preg_replace("/[^0-9.]/", "", $ser)."%' AND users.create_by_user=".$id." UNION select CONCAT(role_name) As result from role WHERE role_name LIKE '".$ser."%' UNION select CONCAT('Inactive') As result from users where 'inactive' LIKE '".$ser."%' or 'Inactive' LIKE '".$ser."%' UNION select CONCAT('Active') As result from users where 'active' LIKE '".$ser."%' or 'Active' LIKE '".$ser."%' ORDER BY result ASC"); 
        }

        if(!empty($students)){
          foreach ($students as $keyser => $valueser) {
            echo "<p>" .$valueser->result."</p>";
          }
        }else{
          echo "<p>No matches found</p>";
        }
      }

      /* function to set session data */
      public function setagentresult(Request $request){

        $agenrt_id = $request->input('arnameemail');
        Session::put('agentsearchresult',$agenrt_id);
        echo 'success';  
      }

      /* function to set search dropdown  session data */
    public function setSearchPrefrence(Request $request){
        $pref = $request->input('pref');
        Session::put('agentSearchPrefrence',$pref);
        echo 'success';
    }

    public function unsetagentresult(Request $request){
        $agenrt_id = $request->input('arnameemail');
        Session::forget('agentsearchresult');
        echo 'success';
    }
      
    public function reset(){
        DB::Update("update users set is_ackdoc_reviewed='0' where user_role='4'");
        return redirect('/users');
    }
     
     public function updatequestion(Request $request){
         
        $id       = Auth::user()->id;
        $data     = $request->input();
      
        if(empty($data['edit_user']) && !empty($data['squestion']))
        {
          $questions = (!empty($data['sanswer'])?count($data['sanswer']):'');
          
          $total_question = (count(array_filter($data['sanswer'], function($x) { return !empty($x); })));
          
         
            if($total_question<5){
              $error=1;
              $question_answer = "'Please answer of 5 Security question.";
              Session::flash('question_answer', $question_answer); 
              
              return back()->with('error',"Please answer of 5 Security question.");
             
            }else{
                
                
                DB::delete('delete from user_security_question where user_id = ?',[$id]);
                $date = date('Y-m-d H:i:s');
            
                for($i=0;$i<count($data['squestion']);$i++){
                    if(!empty($data['sanswer'][$i])){
                        $question = $data['squestion'][$i];
                        $answer = $data['sanswer'][$i];
                        
                        DB::insert('insert into user_security_question (user_id, question,answer,created_at,updated_at) values (?, ?,?,?,?)', [$id, $question,$answer,$date,$date]); 
                    }
                }
               
                Session::flash('message', 'uu');   
                Session::flash('alert-class', 'alert-success');  
                return redirect('/profile');
            }
        }
        
    }
    
    public function change_user_status(Request $request){
        
        $id = $_REQUEST['id'];
        
         $result=DB::update('update users set status = NOT status where id = ?',[$id]);
         if($result){
             echo "1";
         }else{
             echo "0";
         }
         
        //print_r($_REQUEST); exit;
    }
 
}
