<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use App\Repository\AdminRepository;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\UserInfo;
use App\Models\Cms;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
use Auth;
use Image;
use File;
// use DB;

class AdminDashboardController extends Controller {


    function index() 
    {
        
        return view('admin.pages.dashboard.index');
    }

    function profile(AdminRepository $AdminRepository) 
    {
        $table = new User;
        $table2 = new UserInfo;
        $where = array('user_type'=>1);
        $data = $AdminRepository->getByWhere($table, $where);
        // dd($data->id);
        $whereInfo = array('user_id'=> $data->id);
        $dataInfo = $AdminRepository->getByWhere($table2, $whereInfo);
        return view('admin.pages.profile', compact('data', 'dataInfo'));
    }

    function profileUpdate(AdminRepository $AdminRepository, Request $request, $id) {

     $table = new User;
     $updId = base64_decode($id);
     if($request->input('pword')=='')
     {
         $data = array('name'=> $request->input('fname'));
     }
     else
     {
         $data = array(
             'name'        => $request->input('fname'),
             'password'    => Hash::make($request->input('pword'))
             );
     }
     $update = $AdminRepository->update($data, $updId, false, $table);
        
     if($update)
     {
         session()->flash('success', 'Your Update Was Succesfully Made');
            return redirect()->route('admin.profile');
     }
        else
        {
         session()->flash('errors', 'Your Update Was Not Succesfully Made');
            return redirect()->route('admin.profile');
        }
    }


    public function profileImageUpdate(AdminRepository $AdminRepository, Request $request, $id)
    {
     $table = new UserInfo;
     $imgId = base64_decode($id);

     $lastImg = $table::where('user_id', $imgId)->first();

     // dd($lastImg);

     $request->validate([
            'profilepic'       => 'required'
        ]);
     
        //Main Image Insert 
        if(!empty($request->profilepic))
        {
         //Delete Old Images
            
            if(File::exists('storage/'.$lastImg->profile_image))
            {
                File::delete('storage/'.$lastImg->profile_image);
            }

         //Insert New Image
         $image = $request->file('profilepic');
         //Create Image Name
         $img = 'profile_'.time().'.'.$image->getClientOriginalExtension(); 
         // dd($img);
         $location = public_path('storage/avatars/'.$img);
         
         Image::make($image->getRealPath())->resize(400, 400)->save($location);
        }

        
        $data = array('profile_image' => 'avatars/'.$img);
        $return = $AdminRepository->updateInfo($data, $imgId, false, $table);

        if($return)
        {
            session()->flash('success', ' Your Update Was Succesfully Made');
            return redirect()->route('admin.profile');
        }
        else
        {
            session()->flash('errors', 'Your Update Was Not Succesfully Made');
            return redirect()->route('admin.profile');
        }
    }


    function userDetails() 
    {
        $user = User::select('*','users_info.profile_image','users_info.mobile_no','users_info.address','users_info.zip','users_info.language')
                     ->leftJoin('users_info','users_info.user_id', '=', 'users.id')
                     ->where('user_type', 2)
                     ->orderBy('name', 'asc')
                     ->get();
        return view('admin.pages.client.list', compact('user'));
    }


    public function edit(AdminRepository $AdminRepository, Request $request, $id)
    {
        $updid = base64_decode($id);
        $table = new User;
        $table2 = new UserInfo;

        $user = $AdminRepository->getById($updid, $table);
        $where = array('user_id'=>$updid);
        $userInfo = $AdminRepository->getByWhere($table2, $where);
        return view('admin.pages.client.edit', compact('user', 'userInfo'));
    }


    public function update(Request $request, AdminRepository $AdminRepository, $id)
    {
        $user_id = base64_decode($id);
        $table = new User;
        $table2 = new UserInfo;

        $user = $AdminRepository->getById($user_id, $table);
        $where = array('user_id'=>$user_id);
        $userInfo = $AdminRepository->getByWhere($table2, $where);

        if($userInfo->profile_image != NULL)
        {
            if(File::exists('storage/'.$userInfo->profile_image))
            {
                File::delete('storage/'.$userInfo->profile_image);
            }
        }

        if($request->input('mainpic')!= '')
        {
            $image = $request->input('mainpic');
            $data = $image;
            $image_array_1 = explode(";", $data);
         
            $image_array_2 = explode(",", $image_array_1[1]);
            $data = base64_decode($image_array_2[1]);

            //Create Image Name
            $img = 'profile_'.time().'.png'; 

            $location = public_path().'/storage/useravatars/' . $img;
            
            Image::make(file_get_contents($image))->resize(400, 400)->save($location);

            $data = array(
            'name'   => $request->input('fname')
            );

            $dataInfo = array(
            'mobile_no'     => $request->input('editcontact_no'),
            'address'       => $request->input('ADD'),
            'zip'           => $request->input('zip'),
            'profile_image' => 'useravatars/'.$img
            );
            
            $update = $AdminRepository->update($data, $user_id, false, $table);
            $update_info = $AdminRepository->updateInfo($dataInfo, $user_id, false, $table2);

        }
        else
        {
            $data = array(
            'name'   => $request->input('fname')
            );

            $dataInfo = array(
            'mobile_no'     => $request->input('editcontact_no'),
            'address'       => $request->input('ADD'),
            'zip'           => $request->input('zip')
            );
            
            $update = $AdminRepository->update($data, $user_id, false, $table);
            $update_info = $AdminRepository->updateInfo($dataInfo, $user_id, false, $table2);
        }
          

        if($update)
        {
            /*************email********************/
                $to = $request->input('editemail');
                $email_text='   <tr>
                                   <td style="padding: 20px 10px; font-family: sans-serif; font-size: 15px; mso-height-rule: exactly; line-height: 20px;color: #333; ">
                                       <p>Dear <span style="">'.$request->input('fname').'</span> </p>
                                    </td>
                                </tr>
                                <tr>
                                    <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                       <p>Admin Edit Your Profile.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td style="font-family: sans-serif; color: #333; padding: 0px 10px 40px; font-size: 16px; line-height: 30px;">
                                       <p>Stay connected with us. We appreciate very much your trust in us.</p>
                                       <p>Please do not hesitate to contact us for any other requests.</p>
                                    </td>
                                </tr>';
                        //echo $email_text; die;
                $data['email_text'] = $email_text;    
                Mail::send('mail.email_template', $data, function($message) use ($to)
                {
                    $message->from('arijit@digitalaptech.com', 'Emergency');
                    $message->to($to);
                    $message->subject('Update Profile Successfully');
                });
                /*************email********************/

            session()->flash('success', ' User Update Was Succesfully Made ');
            return redirect()->route('admin.userList');
        }
        else
        {
            session()->flash('errors', ' Sorry, But User Was Not Update Successfully; Please Try Again');
            return redirect()->route('admin.cliUpdate', $id);
        }
    }


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

        $user = User::find($id);
        $userInfo = UserInfo::where('user_id', $id)->first();

        return view('admin.pages.client.userDetails', compact('user', 'userInfo'));
    }


    function cms(AdminRepository $AdminRepository) 
    {
        $table = new Cms;
        $cmsData = $AdminRepository->getAll($table);
        return view('admin.pages.cms.list', compact('cmsData'));
    }


    function cmsedit(AdminRepository $AdminRepository, $id) 
    {

        $cms_id = base64_decode($id);
        $table = new Cms;
        $editCms = $AdminRepository->getById($cms_id, $table);
        return view('admin.pages.cms.edit', compact('editCms'));
        // dd($editCms);
    }


    function cmsupdate(AdminRepository $AdminRepository, $id, Request $request)
    {
        $cms_id = base64_decode($id);
        $request->validate([
            'title'        => 'required|max:150',
            'desc'         => 'required'            
        ]);

        $data = array(
            'title'         => $request->input('title'),
            'description'   => $request->input('desc')
        );

        $table = new Cms;
        $AdminRepository->update($data, $cms_id, false, $table);
        
            session()->flash('success', $request->input('title').' Has Update Successfully');
            return redirect()->route('admin.cms');
        
    }


}
