<?php
namespace App\Http\Controllers;
use Illuminate\Support\Collection;
use Validator;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Auth\Events\Registered;
use App\Helper\MailHelper as MailHelper;
use Auth;
use App\Models\User;
use App\Models\Settings\Organisation;
use App\Models\Settings\Department;
use App\Models\Settings\Section;
use App\Models\Settings\Roles;
use App\Models\Settings\Permissions;
use App\Models\Settings\RolePermission;
use App\Models\Settings\UserRoles;
use App\Models\Settings\MenuSettings;
use App\Models\Settings\MenuRolePermission;
use App\Models\Settings\State;
use Request as req;

class UserRegisterController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    //////////user////////////////////////////
    public function user_registration()
    {
        $page_title = 'User Registration';
        $page_description = 'Some description for the page';
        $logo = "images/logo.png";
        $logoText = "images/logo-text.png";
        $active="active";
        $event_class="schedule-event";
        $button_class="btn-primary";
        $action = __FUNCTION__;
        $roles = Roles::where('status',1)->get();
        $users = User::with('userrole','organisation','department','section')->get();
        $organisations = Organisation::all();
        return view('Admin/Settings/user_registration', compact('page_title','page_description','action','logo','logoText','active','event_class','button_class','roles','users','organisations'));
    }
    public function get_section($department_id)
    {
        $sections=Section::where('department_id',$department_id)->get();
        return $sections->pluck('section_name', 'id');
    }
    public function user_registration_post(Request $request)
    {
        //dd($request);
        $messsages = array(
            'name.required'=>'Please enter name',
            'email.required'=>'Please enter email id',
            'password.required'=>'Please enter password',
            'confirm_password.required'=>'Please enter confirm password',
            );
        $rules = array(
            'name'=>'required|max:250',
            'email'=>'required|max:250',
            'password'=>'required|max:250',
            'confirm_password'=>'required|max:250',
            );
        Validator::make($request->all(), $rules,$messsages)->validate();
        $insert_id="";
        $name=$request->name;
        $emailid=$request->email;
        $password=$request->password;
        $cpassword=$request->confirm_password;
        $organisation_id = $request->organisation_id;
        $department_id = $request->department_id;
        $section_id = $request->section_id;
        $phone_number =$request->phone_number;
        //dd($request);
        $id = Auth::user()->id;
        $roles_count = 0;
        $user_upd_id ="";
        $user_count = User::where('email',$emailid)->count();
        if($user_count==0)
        {
            if(!(strcmp($password, $cpassword)) == 0)
            {
                return redirect()->back()->with('warning',"Password and confirm should be same.");
            }
            else
            {
                //////////////////////////////////////////////////////////////////////
                $newpassword = Hash::make($cpassword);
                $insert_id = User::create([
                    'organisation_id' => $organisation_id,
                    'department_id' => $department_id,
                    'section_id' => $section_id,
                    'name' => $name,
                    'email' => $emailid,
                    'password' => $newpassword,
                    'status' => 1,
                    'phone_number' => $phone_number,
                ]);
                $userid = $insert_id->id;
                if ($request->hasFile("photo")) 
                {
                    $fileobj=$request->file("photo")->getClientOriginalName();

                    $destpath="uploads/users";

                    $custom_file_name =$userid.'-'.$fileobj;

                    $path = $request->file("photo")->move(public_path().'/uploads/users/', $custom_file_name);

                    $uploadphoto = User::where('id',$userid)->update(['photo' => $custom_file_name]);
                }
        
                $user_id = $insert_id->id;
                $roles = $request->roles;
                if($roles!=null)
                {
                    foreach($roles as $role)
                    {
                        $user_role_count = UserRoles::where('user_id',$user_id)->where('role_id',$role)->where('status',1)->count();
                        if($user_role_count==0)
                        {
                            $insert_user_role_id = UserRoles::create([
                                'user_id' => $user_id,
                                'role_id' => $role,
                                'status' => 1,
                            ]);
                        }
                    }
                } 
                event(new Registered($insert_id));               
            }
        }      
        if($insert_id)  
        {
            return redirect()->back()->with('success', 'Success! User has been added');
        }
        else
        {
            return redirect()->back()->with('error', 'Failed! User with same Email ID exist!!');
        }
    }   
    public function show_user($id)
    {
        $page_title = 'User Registration';
        $page_description = 'Some description for the page';
        $logo = "images/logo.png";
        $logoText = "images/logo-text.png";
        $active="active";
        $event_class="schedule-event";
        $button_class="btn-primary";
        $action = __FUNCTION__;
        $roles = Roles::where('status',1)->get();
        $users = User::where('id',$id)->with('userrole','organisation','department','section')->first();
        if(isset($users))
        {
            $organisation_id = $users->organisation_id;
            $department_id = $users->department_id;
            $section_id = $users->section_id;
        }
        $organisations = Organisation::all();
        $departments = Department::where('organisation_id',$organisation_id)->get();
        $sections = Section::where('organisation_id',$organisation_id)->where('department_id',$department_id)->get();
        return view('Admin/Settings/show_user', compact('page_title','page_description','action','logo','logoText','active','event_class','button_class','roles','users','departments','sections','organisations'));
    }
    public function show_user_post(Request $request)
    {
        $insert_id="";
        $name=$request->name;
        $email=$request->email;
        $password=$request->password;
        $cpassword=$request->confirm_password;
        $user_id = $request->user_id;
        $status = $request->status;
        $organisation_id = $request->organisation_id;
        $department_id = $request->department_id;
        $section_id = $request->section_id;
        $phone_number =$request->phone_number;
        //dd($request);
        $updflg = 0;
        $id = Auth::user()->id;
        $users = User::where('id',$user_id)->first();
        if(isset($users))
        {
            $updflg = 1;
            $users->name=$name;
            $users->email=$email;
            $users->status=$status;
            $users->organisation_id=$organisation_id;
            $users->department_id=$department_id;
            $users->section_id=$section_id;
            $users->phone_number = $phone_number;
            $users->save();

            if($password && $cpassword)
            {
                if(!(strcmp($password, $cpassword)) == 0)
                {
                    $updflg = 0;
                    return redirect()->back()->with('warning',"Password and confirm should be same.");
                }
                else
                {
                    if($cpassword)
                    {
                        $updflg = 1;
                        $newpassword = Hash::make($cpassword);
                        $user_pwd = User::where('id',$user_id)->first();
                        $user_pwd->password = $newpassword;
                        $user_pwd->save();
                    }
                }
            }
            $roles = $request->roles;
            $user_role_del = UserRoles::where('user_id',$user_id)->delete();
            foreach($roles as $role)
            {

                $user_role_count = UserRoles::where('user_id',$user_id)->where('role_id',$role)->where('status',1)->count();
                if($user_role_count==0)
                {
                    $updflg = 1;
                    $insert_user_role_id = UserRoles::create([
                        'user_id' => $user_id,
                        'role_id' => $role,
                        'status' => 1,
                    ]);
                }
            }

            if($request->hasFile("photo")) 
            {
                $fileobj=$request->file("photo")->getClientOriginalName();
                $destpath="uploads/users";
                $custom_file_name =$userid.'-'.$fileobj;
                if($custom_file_name!="")
                {
                    $updflg = 1;
                    $path = $request->file("photo")->move(public_path().'/uploads/users/', $custom_file_name);
                    $uploadphoto = User::where('id',$userid)->update(['photo' => $custom_file_name]);
                }
            }
        }
        if($updflg = 1)
        {
            return redirect('user_registration')->with('success', 'Success! User has been updated');
        }
        if($updflg = 0)
        {
            return redirect('user_registration')->with('error', 'Failed!');
        }
    }
    public function delete_user(Request $request)
    {
        $user_id = $request->user_id;
        $user_roles = UserRoles::where('user_id',$user_id)->get();
        foreach($user_roles as $user_role)
        {
            $user_role_id = $user_role->id;
            $user_roles_del = UserRoles::where('id',$user_role_id)->delete();
        }
        $users = User::where('id',$user_id)->first();
        if(isset($users))
        {
            $users->status = 0;
            $users->verified = 0;
            $users->verification_token = null;
            $users->save();
        }
        $user_delete=User::where('id',$user_id)->delete();
        return 1;         
        
    }
    ///////////////////////////////////////////////////////
    
}
