<?php

namespace App\Http\Controllers;

use App\Models\User;
use App\Models\Branch;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use \App\Http\Requests\StoreUserRequest;

class UserController extends Controller
{
    protected $LogController;
    public function __construct(LogController $LogController)
    {
        $this->LogController = $LogController;
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $users = User::select('*', 'users.id as uid')
                        ->leftJoin('branchs', 'branchs.id', '=', 'users.branch_id')
                        ->where('users.id', '!=', '0')
                        ->where('users.is_active', '=', '1')
                        ->orderBy('users.id')
                        ->get();

        return view('user.index')->with([
            'page_title' => 'การจัดการผู้ใช้ระบบ',
            'users' => $users
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $branchs = Branch::orderBy('code')->get();
        return view('user.create')->with([
            'page_title' => 'เพิ่มผู้ใช้ระบบ',
            'branchs' => $branchs
        ]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(StoreUserRequest $request)
    {
        $user = new User;
        $user->title = $request->title;
        $user->username = $request->username;
        $user->firstname = $request->firstname;
        $user->lastname = $request->lastname;
        $user->phone = $request->phone;
        $user->email = $request->email;
        $user->password = Hash::make($request->password);
        $user->branch_id = $request->branch;
        $user->role = $request->role;
        $user->save();

        // Log
        $description = "เพิ่มผู้ใช้ระบบ:". $request->username . ", สิทธิ์:".$request->role;
        $this->LogController->log('การจัดการผู้ใช้ระบบ', 'เพิ่มข้อมูล', $description);

        return redirect()->route('user.index')->with('feedback','เพิ่มผู้ใช้ระบบเรียบร้อย');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\User  $user
     * @return \Illuminate\Http\Response
     */
    public function show(User $user)
    {
        $data = User::select('*', 'users.id as uid')->leftJoin('branchs', 'branchs.id', '=', 'users.branch_id')->where('users.id', '=', $user->id)->first();

        return view('user.show', [
            'page_title'=>'ข้อมูลส่วนตัวผู้ใช้',
            'user'=>$data
        ]);
    }

    public function info()
    {

        $data = User::select('*', 'users.id as uid')->leftJoin('branchs', 'branchs.id', '=', 'users.branch_id')->where('users.id', '=', auth()->user()->id)->first();

        return view('user.info', [
            'page_title'=>'ข้อมูลส่วนตัวผู้ใช้',
            'user'=>$data
        ]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\User  $user
     * @return \Illuminate\Http\Response
     */
    public function info_edit(Request $request)
    {
        $branchs = Branch::orderBy('code')->get();
        $user = User::find($request->uid);
        return view('user.info_edit', [
            'page_title' => 'แก้ไขผู้ใช้',
            'user' => $user,
            'branchs' => $branchs
        ]);
    }

    public function info_update(Request $request)
    {
        $request->validate([
            'title' => 'required',
            'firstname' => 'required',
            'phone' => 'required',
            'branch' => 'required',
            'role' => 'required',
        ],[
            'title.required' => 'กรุณาเลือกคำนำหน้า',
            'firstname.required' => 'กรุณากรอกชื่อ',
            'phone.required' => 'กรุณากรอกหมายเลขโทรศัพท์',
            'branch.required' => 'กรุณาเลือกสาขา',
            'role.required' => 'กรุณาเลือกสิทธิ์',
        ]);

        $user = User::find($request->uid);
        $user->title = $request->title;
        $user->firstname = $request->firstname;
        $user->lastname = $request->lastname;
        $user->phone = $request->phone;
        $user->branch_id = $request->branch;
        $user->email = $request->email;
        $user->role = $request->role;
        $user->save();

        // Log
        $description = "แก้ไขข้อมูลส่วนตัว";
        $this->LogController->log('ข้อมูลส่วนตัว', 'แก้ไขข้อมูล', $description);

       return redirect()->route('user.info')->with('feedback','แก้ไขข้อมูลส่วนตัวเรียบร้อย');
    }

    public function edit(User $user)
    {
        $branchs = Branch::orderBy('code')->get();
        return view('user.edit', [
            'page_title' => 'แก้ไขผู้ใช้',
            'user' => $user,
            'branchs' => $branchs
        ]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\User  $user
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, User $user)
    {
        $request->validate([
            'title' => 'required',
            'firstname' => 'required',
            'phone' => 'required',
            'branch' => 'required',
            'role' => 'required',
        ],[
            'title.required' => 'กรุณาเลือกคำนำหน้า',
            'firstname.required' => 'กรุณากรอกชื่อ',
            'phone.required' => 'กรุณากรอกหมายเลขโทรศัพท์',
            'branch.required' => 'กรุณาเลือกสาขา',
            'role.required' => 'กรุณาเลือกสิทธิ์',
        ]);

        $user->title = $request->title;
        $user->firstname = $request->firstname;
        $user->lastname = $request->lastname;
        $user->phone = $request->phone;
        $user->branch_id = $request->branch;
        $user->email = $request->email;
        $user->role = $request->role;
        $user->save();

        // Log
        $description = "แก้ไขข้อมูลส่วนตัว";
        $this->LogController->log('ข้อมูลส่วนตัว', 'แก้ไขข้อมูล', $description);

       return redirect()->route('user.index')->with('feedback','แก้ไขข้อมูลส่วนตัวเรียบร้อย');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\User  $user
     * @return \Illuminate\Http\Response
     */
    public function destroy(User $user)
    {
        $user->is_active = '0';
        $user->save();
        // Log
        $description = "ลบผู้ใช้ระบบ: ". $user->username;
        $this->LogController->log('การจัดการผู้ใช้ระบบ', 'ลบข้อมูล', $description);

        return redirect()->route('user.index')->with('feedback','ลบข้อมูลผู้ใช้ระบบเรียบร้อย');
    }

    public function admin_change_password($id)
    {
        $user = User::find($id);
        return view('user.admin_changepass', [
            'page_title' => 'เปลี่ยนรหัสผ่านผู้ใช้',
            'user' => $user,
        ]);
    }

    public function admin_update_change_password(Request $request, $id) {
        $request->validate([
            'password' => 'required|confirmed|min:6',
        ],[
            'password.required' => 'กรุณากรอกรหัสผ่าน',
            'password.confirmed' => 'รหัสผ่านไม่ตรงกัน กรุณาลองอีกครั้ง',
            'password.min:6' => 'กรุณารหัสผ่านอย่างน้อย 6 ตัวอักษร',
        ]);

        $user = User::find($id);
        $user->password = Hash::make($request->password);
        $user->save();
        return redirect()->route('user.index')->with('feedback','เปลี่ยนรหัสผ่านเรียบร้อย');
    }

    public function change_password(Request $request)
    {
        $user = User::find($request->uid);
        return view('user.changepass', [
            'page_title' => 'เปลี่ยนรหัสผ่านผู้ใช้',
            'user' => $user,
        ]);
    }

    public function update_change_password(Request $request) {

        $request->validate([
            'password' => 'required|confirmed|min:6',
        ],[
            'password.required' => 'กรุณากรอกรหัสผ่าน',
            'password.confirmed' => 'รหัสผ่านไม่ตรงกัน กรุณาลองอีกครั้ง',
            'password.min:6' => 'กรุณารหัสผ่านอย่างน้อย 6 ตัวอักษร',
        ]);

        $user = User::find($request->uid);
        $user->password = Hash::make($request->password);
        $user->save();
        return redirect()->route('home.index')->with('feedback','เปลี่ยนรหัสผ่านเรียบร้อย');
    }
}
