<?php

namespace App\Http\Controllers\Frontend\client;

use App\Http\Controllers\Controller;
use App\Repository\AdminRepository;
use Illuminate\Http\Request;
use App\Models\Property;
use App\Models\PropertyImage;
use App\Models\Userinfo;
use App\Models\Category;
use App\Models\User;
use Image;
use File;
use Auth;

class ClientController extends Controller
{
    public function index(AdminRepository $AdminRepository)
    {

    	$table = new Property;
    	$table1 = new Userinfo;
        
        $where = array('status'=>1, 'is_deleted'=>0);
        $searchmotgage = $AdminRepository->getAllByWhere($table, $where);

        $where1 = array('user_id'=>Auth::user()->id);
        $userinfo = $AdminRepository->getByWhere($table1, $where1);
        // dd($userinfo);

        $where2 = array('status'=>1, 'is_deleted'=>0, 'user_id'=>Auth::user()->id);
        $selfMotgage = $AdminRepository->getAllByWherePaginate($table, $where2, 5);
    	
    	return view('frontend.pages.client.profile', compact('searchmotgage', 'userinfo', 'selfMotgage'));
    }


    public function updateProfile(AdminRepository $AdminRepository, Request $request, $id)
    {

        $uid = base64_decode($id);
    	$table = new User;
    	$table1 = new Userinfo;

    	$data = array(
        'address'     => $request->input('addr'),
        'company_name'=> $request->input('cname'),
        'cont_number' => $request->input('pno'),
        'address'     => $request->input('addr'),
        'city'        => $request->input('city'),
        'postal_code' => $request->input('zip'),
        'country_id'  => $request->input('country')
        );

    	

        $where = array('user_id' => $uid);
        $infoId = $AdminRepository->getByWhere($table1, $where);
        
        if(count($infoId)>0)
        {
        	$AdminRepository->update($data, $infoId->id, false, $table1);
    	}

        $lastImg = $table::find($uid);

    	//Main Image Insert 
        if(count($request->img) > 0)
        {
         //Delete Old Images
            
            if(File::exists('upload/profile/'.$lastImg->image))
            {
                File::delete('upload/profile/'.$lastImg->image);
            }

         //Insert New Image
         $image = $request->file('img');
         //Create Image Name
         $img = 'profile'.time().'.'.$image->getClientOriginalExtension(); 
         $location = public_path('upload/profile/'.$img);
         Image::make($image)->save($location);
        }

		$data1 = array('name' => $request->input('fname'),'image' => $img);

		$where1 = array('id' => $uid);
        $Id = $AdminRepository->getByWhere($table, $where1);
        if(count($Id)>0)
        {
        	$return = $AdminRepository->update($data1, $Id->id, false, $table);
    	}
        if($return)
        {
            session()->flash('success', ' Profile Update Successfully');
            return redirect()->route('front.profile');
        }
        else
        {
            session()->flash('errors', 'Profile Not Update');
            return redirect()->route('front.profile');
        }



    }



    public function add(Request $request, AdminRepository $AdminRepository)
    {
        $table = new User;
        $where = array('role_id'=>2);
        $user = $AdminRepository->getAllByWhere($table, $where);
        // dd($user);
        $table1 = new Category;
        $catWhere = array('parent_type'=>0);
        $cat = $AdminRepository->getAllByWhere($table1, $catWhere);
        return view('frontend.pages.client.addMotgage', compact('user', 'cat'));
    }


    public function ajaxFetch(AdminRepository $AdminRepository, Request $request)
    {
        $id = $request->input('id');

        $table = new Category;
        $where = array('parent_id'=>$id);
        $data = $AdminRepository->getAllByWhere($table, $where);
        if(count($data)>0)
        {
            $output = '<option value="0">--Select--</option>';
            foreach ($data as $value) 
            {
                 $output .= '<option value="'.$value->id.'">'.$value->cat_name.'</option>';
                 
            }
            echo $output;
        } 
        else
        {
            $output = '<option value="0">--Select--</option>';

            echo $output;
        }

        
    }

    public function ajaxSubFetch(AdminRepository $AdminRepository, Request $request)
    {
        $id = $request->input('id');
        // echo $id;
        $table = new Category;
        $where = array('parent_id'=>$id);
        $data = $AdminRepository->getAllByWhere($table, $where);
        // print_r($data);
        if(count($data)>0)
        {
            $output = '<option value="0">--Select--</option>';
            foreach ($data as $value) 
            {
                 $output .= '<option value="'.$value->id.'">'.$value->cat_name.'</option>';
                 
            }
            echo $output;
        } 
        else
        {
            $output = '<option value="0">--Select--</option>';

            echo $output;
        }

        
    }



    public function store(AdminRepository $AdminRepository, Request $request)
    {
        
        
        $table = new Property;
        
        $request->validate([
            'name'        => 'required|max:150',
            'propcat'     => 'required',
            'subcat'      => 'required',
            'country'     => 'required',
            'state'       => 'required',
            'city'        => 'required',
            'zipcode'     => 'required',  
            'addr'        => 'required', 
            'desc'        => 'required', 
            'enddate'     => 'required', 
            'etime'       => 'required',
            'main_pic'    => 'required',

        ]);


        //Main Image Insert 
        if($request->hasFile('main_pic'))
        {
            $image = $request->file('main_pic');
            //Create Image Name
            $img = 'Main_'.time().'.'.$image->getClientOriginalExtension(); 
            $location = public_path('upload/property/'.$img);
            Image::make($image)->save($location);
        }
        
        $where = array('prop_name'=> $request->input('name'));
        $prop = $AdminRepository->getByWhere($table, $where);
        if ($prop === null) {
                        
              if($request->input('subsubcat') == 0)
              {
                $data = array(
                    'prop_name'   => $request->input('name'),
                    'catid'       => $request->input('subcat'),
                    'parent_catid'=> $request->input('propcat'),
                    'prop_desc'   => $request->input('desc'),
                    'picture'     => $img,
                    'prop_country'=> $request->input('country'),
                    'prop_state'  => $request->input('state'),
                    'prop_city'   => $request->input('city'),  
                    'prop_addr'   => $request->input('addr'), 
                    'prop_pincode'=> $request->input('zipcode'), 
                    'prop_price'  => $request->input('price'), 
                    'user_id'     => $request->input('user_id'),
                    'created_by'  => Auth::user()->name,
                    'status'      => 1,
                    'endDate'     => $request->input('enddate'),
                    'endTime'     => $request->input('etime')
                    
                );
              }
              else
              {
                $data = array(
                'prop_name'   => $request->input('name'),
                'catid'       => $request->input('subsubcat'),
                'parent_catid'=> $request->input('propcat'),
                'prop_desc'   => $request->input('desc'),
                'picture'     => $img,
                'prop_country'=> $request->input('country'),
                'prop_state'  => $request->input('state'),
                'prop_city'   => $request->input('city'),  
                'prop_addr'   => $request->input('addr'), 
                'prop_pincode'=> $request->input('zipcode'), 
                'prop_price'  => $request->input('price'), 
                'user_id'     => $request->input('user_id'),
                'created_by'  => Auth::user()->name,
                'status'      => 1,
                'endDate'     => $request->input('enddate'),
                'endTime'     => $request->input('etime')
                );
              }

            $prop_id = $AdminRepository->create($data, $table);
           
           //Gallery Images Insert
           if(count($request->gallery_pic) > 0)
            {
                foreach ($request->gallery_pic as $image) 
                {
                        //Create Image Name
                        $img1 = $image->getClientOriginalName().time().'.'.$image->getClientOriginalExtension(); 
                        $location = public_path('upload/property/'.$img1);
                        Image::make($image)->save($location);

                        $table1 = new PropertyImage;
                        $data1 = array(
                            'prop_id'   => $prop_id->id,
                            'prop_pic'  => $img1
                        );
                        
                    $AdminRepository->create($data1, $table1);
                    
                }
            }
           session()->flash('success', 'New Motgage Property Created Successfully');
            return redirect()->route('front.profile');
        }
        else
        {
            session()->flash('errors', 'Motgage Property Already Exist');
            return redirect()->route('front.profile');
        }   
        

    }


    public function edit(AdminRepository $AdminRepository, $id)
    {
        $editId = base64_decode($id);

        //Property
        $table = new Property;
        $prop = $AdminRepository->getById($editId, $table);

        //User
        $table2 = new User;
        $where = array('role_id'=>2);
        $user = $AdminRepository->getAllByWhere($table2, $where);
        
        //Category
        $table1 = new Category;
        $catWhere = array('id'=>$prop->catid);
        $procat = $AdminRepository->getByWhere($table1, $catWhere);

        $catgwhere = array('parent_type'=>0);
        $catg = $AdminRepository->getAllByWhere($table1, $catgwhere);
        $catgwhere1 = array('parent_id'=>$procat->parent_id);
        $catg1 = $AdminRepository->getAllByWhere($table1, $catgwhere1);
        
        
        if($procat->parent_type == 2)
        {
            $allsubcatWhere = array('id'=>$procat->parent_id);
            $allsubcat = $AdminRepository->getByWhere($table1, $allsubcatWhere);

            $allsubcatWhere1 = array('parent_id'=>$allsubcat->parent_id);
            $allsubcat1 = $AdminRepository->getAllByWhere($table1, $allsubcatWhere1);

            
            $pcatWhere = array('id'=>$procat->parent_id);
            $subcat = $AdminRepository->getByWhere($table1, $pcatWhere);

            $mcatWhere = array('id'=>$subcat->parent_id);
            $cat = $AdminRepository->getByWhere($table1, $mcatWhere);

            return view('admin.pages.property.edit', compact('user', 'cat', 'prop', 'catg', 'subcat', 'allsubcat1', 'catg1'));
        }
        else
        {
            $pcatWhere = array('id'=>$procat->parent_id);
            $subcat = $AdminRepository->getByWhere($table1, $pcatWhere);
            
            $mcatWhere = array('parent_id'=>$subcat->parent_id);
            $cat = $AdminRepository->getAllByWhere($table1, $mcatWhere);
            
            return view('frontend.pages.client.editMotgage', compact('user', 'prop', 'catg1', 'subcat', 'cat'));
        }


    }



    public function update(AdminRepository $AdminRepository, Request $request, $id)
    {
        $updId = base64_decode($id);
        
        $table = new Property;
        
        $request->validate([
            'name'        => 'required|max:150',
            'propcat'     => 'required',
            'subcat'      => 'required',
            'country'     => 'required',
            'state'       => 'required',
            'city'        => 'required',
            'zipcode'     => 'required',  
            'addr'        => 'required', 
            'desc'        => 'required', 
            'enddate'     => 'required', 
            'etime'       => 'required'
            
        ]);

     
                            
          if($request->input('subsubcat') == 0)
          {
            $data = array(
                'prop_name'   => $request->input('name'),
                'catid'       => $request->input('subcat'),
                'prop_desc'   => $request->input('desc'),
                'prop_country'=> $request->input('country'),
                'prop_state'  => $request->input('state'),
                'prop_city'   => $request->input('city'),  
                'prop_addr'   => $request->input('addr'), 
                'prop_pincode'=> $request->input('zipcode'), 
                'prop_price'  => $request->input('price'),
                'endDate'     => $request->input('enddate'),
                'endTime'     => $request->input('etime')
                
            );
          }
          else
          {
            $data = array(
            'prop_name'   => $request->input('name'),
            'catid'       => $request->input('subsubcat'),
            'prop_desc'   => $request->input('desc'),
            'prop_country'=> $request->input('country'),
            'prop_state'  => $request->input('state'),
            'prop_city'   => $request->input('city'),  
            'prop_addr'   => $request->input('addr'), 
            'prop_pincode'=> $request->input('zipcode'), 
            'prop_price'  => $request->input('price'),
            'endDate'     => $request->input('enddate'),
            'endTime'     => $request->input('etime')
            );
          }

        $return = $AdminRepository->update($data, $updId, false, $table);
       
        if($return)
        {
            session()->flash('success', ' Motgage Property Update Successfully');
            return redirect()->route('front.profile');
        }
        else
        {
            session()->flash('errors', 'Motgage Property Not Update');
            return redirect()->route('front.profile');
        }
         
        

    }


    public function gallery(AdminRepository $AdminRepository, $id)
    {
        $mainPicId = base64_decode($id);

        $table = new Property;
        $data = $AdminRepository->getById($mainPicId, $table);

        $table1 = new PropertyImage;
        $where = array('prop_id' => $mainPicId);
        $allPic = $AdminRepository->getAllByWhere($table1, $where);
        // dd($allPic);       
        return view('frontend.pages.client.gallery', compact('data', 'allPic'));
    }


    public function galleryUpdate(Request $request, AdminRepository $AdminRepository, $id)
    {
        $galId = base64_decode($id);
        $table = new Property;

        $prop = Property::find($galId);
        
        //Main Image Insert 
        if(count($request->mainpic) > 0)
        {
         //Delete Old Images
            if(File::exists('upload/property/'.$prop->picture))
            {
                File::delete('upload/property/'.$prop->picture);
            }

         //Inasert New Image
         $image = $request->file('mainpic');
         //Create Image Name
         $img = 'Main_'.time().'.'.$image->getClientOriginalExtension(); 
         $location = public_path('upload/property/'.$img);
         Image::make($image)->save($location);
        }

        $data = array('picture' => $img);
        $return = $AdminRepository->update($data, $galId, false, $table);
        if($return)
        {
            session()->flash('success', ' Main Image Update Successfully');
            return redirect()->route('front.propGalleryList', $id);
        }
        else
        {
            session()->flash('errors', 'Main Image Not Update');
            return redirect()->route('front.propGalleryList', $id);
        }
    }



    public function multipleImageUpdate(Request $request, AdminRepository $AdminRepository, $id)
    {
        $mulId = base64_decode($id);
        // dd($mulId);
        $table = new PropertyImage;

        $prop = $table::find($mulId);
        

        //Main Image Insert 
        if(count($request->multiplePic) > 0)
        {
         //Delete Old Images
            
            if(File::exists('upload/property/'.$prop->prop_pic))
            {
                File::delete('upload/property/'.$prop->prop_pic);
            }

         //Inasert New Image
         $image = $request->file('multiplePic');
         //Create Image Name
         $img = $image->getClientOriginalName().time().'.'.$image->getClientOriginalExtension(); 
         $location = public_path('upload/property/'.$img);
         Image::make($image)->save($location);
        }

        $data = array('prop_pic' => $img);
        $return = $AdminRepository->update($data, $mulId, false, $table);
        if($return)
        {
            session()->flash('success', ' Image Update Successfully', base64_encode($prop->id));
            return redirect()->route('front.propGalleryList', base64_encode($prop->prop_id));
        }
        else
        {
            session()->flash('errors', 'Image Not Update');
            return redirect()->route('front.propGalleryList',base64_encode($prop->prop_id));
        }
    }



    public function addMultipleImage(Request $request, AdminRepository $AdminRepository, $id)
    {
        $mulId = base64_decode($id);
        // dd($mulId);
        $table = new PropertyImage;

        // dd($request->addmultiplePic);

        if(count($request->addmultiplePic) > 0)
            {
                foreach ($request->addmultiplePic as $image) 
                {
                        //Create Image Name
                        $img = $image->getClientOriginalName().time().'.'.$image->getClientOriginalExtension(); 
                        $location = public_path('upload/property/'.$img);
                        Image::make($image)->save($location);

                        $data = array(
                            'prop_id'   => $mulId,
                            'prop_pic'  => $img
                        );
                        
                    $AdminRepository->create($data, $table);
                    
                    
                }
                    session()->flash('success', 'New Motgage Gallery Image Created Successfully');
                    return redirect()->route('front.propGalleryList', $id);
            }
    }


    public function galleryDelete(Request $request, AdminRepository $AdminRepository, $id)
    {
        $delId = base64_decode($id);
        $table = new PropertyImage;
        $data = $AdminRepository->getById($delId, $table);
        $encode = base64_encode($data->prop_id);
        // dd($data);
        if(!empty($data->id))
        {
            $where = array('id'=>$delId);
            $AdminRepository->delete($table, $where);

            session()->flash('success', 'Picture Permanent Deleted Successfully');
            return redirect()->route('front.propGalleryList', $encode);
        }
        else
        {
            session()->flash('errors', 'Picture Not Deleted Successfully');
            return redirect()->route('front.propGalleryList', $encode);
        }
    }



    public function softDelete(Request $request, AdminRepository $AdminRepository, $id)
    {
        $delId = base64_decode($id);
        $table = new Property;
        $data = $AdminRepository->getById($delId, $table);

        if(!empty($data->id))
        {
            $data = array('is_deleted'=>1);
            $AdminRepository->update($data, $delId, false, $table);
            
            session()->flash('success', 'Motgage Property Deleted Successfully');
            return redirect()->route('front.profile');
        }
        else
        {
            session()->flash('errors', 'Motgage Property Not Deleted Successfully');
            return redirect()->route('front.profile');
        }
    }
}
