<?php

namespace App\Http\Controllers\Admin;

use App\Actions\User\CreateUser;
use App\Actions\User\UpdateUser;
use Spatie\Permission\Models\Role;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\UserFormRequest;
use App\Models\Admin;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;

class UserController extends Controller
{
    use ValidatesRequests;

    public function dashboard()
    {
        session(['layout_mode' => 'left_nav']);

        return view('admin.index');
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        abort_if(!userCan('admin.view'), 403);
        $query = Admin::query();
        $query->where('id', '!=', 1);
        if ($request->keyword && $request->keyword != null) {
            $query->where('name', 'LIKE', "%$request->keyword%")
            ->orWhere('email', 'LIKE', "%$request->keyword%");
        }
        $users = $query->where('id', '!=', 1)->Paginate(10);
        // $users = Admin::where('id', '!=', 1)->Paginate(10);
        return view('admin.users.index', compact('users'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        abort_if(!userCan('admin.create'), 403);

        $roles = Role::all();
        return view('admin.users.create', compact('roles'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\UserFormRequest  $request
     * @return \Illuminate\Http\Response
     */
    public function store(UserFormRequest $request)
    {
        abort_if(!userCan('admin.create'), 403);

        try {
            CreateUser::create($request);

            flashSuccess(__('user_created_successfully'));
            return back();
        } catch (\Throwable $th) {
            flashError($th->getMessage());
            return back();
        }
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit(Admin $user)
    {
        abort_if(!userCan('admin.edit'), 403);

        $roles = Role::all();
        return view('admin.users.edit', compact('roles', 'user'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(UserFormRequest $request, Admin $user)
    {
        abort_if(!userCan('admin.edit'), 403);

        try {
            UpdateUser::update($request, $user);

            flashSuccess(__('user_updated_successfully'));
            return back();
        } catch (\Throwable $th) {
            flashError($th->getMessage());
            return back();
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Admin $user)
    {
        abort_if(!userCan('admin.delete'), 403);

        try {
            if (!is_null($user)) {
                $user->delete();
            }

            flashSuccess(__('user_deleted_successfully'));
            return back();
        } catch (\Throwable $th) {
            flashError($th->getMessage());
            return back();
        }
    }

    public function userStatusChange(Request $request)
    {

        abort_if(!userCan('admin.edit'), 403);
        $user = Admin::findOrFail($request->id);
        if($request->type == 'status'){
            $user->status = $request->status;
        }
      
        $user->save();

        if ($request->status == 1) {
            return responseSuccess(__('Activated successfully'));
        } else {
            return responseSuccess(__('Deactivated successfully'));
        }
    }
}
