<?php

namespace App\Http\Controllers;

use App\Models\Role;
use App\Models\User;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Contracts\View\View;
//use Illuminate\View\View;


class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return View
     */
    public function index() : View
    {
        $users = User::all();

        return view("admin.users")->with([
            "users" => $users
        ]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

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

    /**
     * Show the form for editing the specified resource.
     *
     * @param User $user
     * @return View
     */
    public function edit(User $user) : View
    {
        $roles = Role::all();

        // Used so users can edit themself.
        if(auth()->user()->role->name != "Admin") {
            if($user->id != auth()->user()->id) {
                return view("error");
            }
        }

        return view("admin.show-user")->with([
            "user" => $user,
            "roles" => $roles
        ]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param Request $request
     * @param User $user
     * @return View
     */
    public function update(Request $request, User $user) : View
    {
        $data = $request->validate([
//            'name' => 'required|string|max:64|min:2',
//            'password' => 'nullable|max:48|min:8|confirmed',
//            'email' => 'required|email',
            'role' => 'nullable'
        ]);

        if (key_exists("role", $data) && $data["role"] != null) {
            $user->role()->associate(Role::find($data["role"]));
        }

//        if(key_exists("password", $data) && $data["password"] != null) {
//            $user->password = Hash::make($user->password);
//        }

//        $user->name = $data["name"];
//        $user->email = $data["email"];

        $user->save();

        $roles = Role::all();

        // Used so users can edit themself.
        if(auth()->user()->role->name != "Admin") {
            if($user->id != auth()->user()->id) {
                return view("error");
            }
        }

        return view("admin.show-user")->with([
            "user" => $user,
            "roles" => $roles
        ]);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param User $user
     * @return RedirectResponse
     */
//    public function destroy(User $user) : RedirectResponse
//    {
//        if($user->id == auth()->id()) {
//            return redirect()->route("index");
//        }
//
//        $user->posts()->delete();
//
//        $user->delete();
//
//        return redirect()->route("index");
//    }
}