<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\RoleRequest;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

class RolesController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $roles = Role::all(); //where('name', '<>', 'Super Admin')->get();

        return view('admin.roles.index', [
            'roles' => $roles
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $permissions = [];
        $actions = ['show', 'create', 'edit', 'destroy'];

        foreach ($actions as $action) {
            $permissions[$action] = Permission::where('name', 'like', '%.'.$action)->get();
        }

        return view('admin.roles.create', [
            'permissions' =>  $permissions,
            'actions' => $actions
        ]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \App\Http\Requests\RoleRequest  $request
     * @return \Illuminate\Http\Response
     */
    public function store(RoleRequest $request)
    {
        //$this->authorize('create', Role::class);

        $role = Role::create($request->getRolePayload());

        foreach (array_keys($request->getRolePayload()['permissions']) as $permission) {
            $role->givePermissionTo($permission);
        }

        return redirect()->route('roles.index');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Model\Role  $role
     * @return \Illuminate\Http\Response
     */
    public function show(Role $role)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Model\Role  $role
     * @return \Illuminate\Http\Response
     */
    public function edit(Role $role)
    {
        $permissions = [];
        $actions = ['show', 'create', 'edit', 'destroy'];

        foreach ($actions as $action) {
            $permissions[$action] = Permission::where('name', 'like', '%.'.$action)->get();
        }

        return view('admin.roles.edit', [
            'role' => $role,
            'permissions' =>  $permissions,
            'actions' => $actions
        ]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \App\Http\Requests\RoleRequest  $request
     * @param  \App\Model\Role  $role
     * @return \Illuminate\Http\Response
     */
    public function update(RoleRequest $request, Role $role)
    {
        $role->update($request->getRolePayload());

        foreach ($role->permissions as $permission) {
            $role->revokePermissionTo($permission);
        }

        foreach (array_keys($request->getRolePayload()['permissions']) as $permission) {
            $role->givePermissionTo($permission);
        }

        return redirect()->route('roles.index');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Model\Role  $role
     * @return \Illuminate\Http\Response
     */
    public function destroy(Role $role)
    {
        //
    }
}
