<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use File;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;

class RoleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

    protected string $module = 'Roles Management';

    public function __construct()
    {
        $module = $this->module;

        $this->middleware("permission:$module list")->only(['index']);
        $this->middleware("permission:$module view")->only(['show']);
        $this->middleware("permission:$module add")->only(['create', 'store']);
        $this->middleware("permission:$module edit")->only(['edit', 'update']);
        $this->middleware("permission:$module delete")->only(['destroy']);
    }
    // protected $role_id;
    // // public function __construct()
    // // {
    // //     $this->middleware('auth');
    // //     $this->middleware(function ($request, $next) {
    // //         $this->role_id = Auth::user()->role_id;
    // //         // $slug_filter = preg_replace('/[0-9]+/', '', $request->path());
    // //         // $slug_filter = preg_replace('/[0-9]+/', '', $request->path());
    // //         $ex = explode('/', $request->path());
    // //         if (count($ex) >= 3) {
    // //             $sliced = array_slice($ex, 0, -1);
    // //         } else {
    // //             $sliced = $ex;
    // //         }

    // //         $string = implode("/", $sliced);
    // //         //                 dd($string);
    // //         if (checkConstructor($this->role_id, count($ex) >= 3 ? $string . '/' : $string) == 1) {
    // //             return $next($request);
    // //         } else if (strpos($request->path(), 'store') !== false) {
    // //             return $next($request);
    // //         } else if (strpos($request->path(), 'update') !== false) {
    // //             return $next($request);
    // //         } else {
    // //             abort(404);
    // //         }
    // //     });
    // // }

    public function index()
    {
        $roles = DB::table('roles')->where('id', '!=', 45)->get()->toArray();
        // dd($roles);
        //        print_r($roles); exit;
        return view('roles.index')->with(compact('roles'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $title = 'Roles';
        $menu = 'role';
        $submenu = 'role';
        $page = 'add';
        // dd($page);

        return view('roles.create')->with(compact('title', 'menu', 'submenu', 'page'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $this->validate($request, [
            'role' => 'required',
        ]);
        // dd($request);
        DB::table('roles')->insert(['name' => $request->role, 'guard_name' => 'web', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')]);

        return redirect(url('roles'));
    }

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

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $title = 'Roles';
        $menu = 'role';
        $submenu = 'role';
        $page = 'edit';
        $role = DB::table('roles')->where('id', $id)->first();

        return view('roles.edit')->with(compact('title', 'menu', 'submenu', 'page', 'role'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $this->validate($request, [
            'role' => 'required',
        ]);

        DB::table('roles')->where('id', $id)->update(['role' => $request->role, 'updated_at' => date('Y-m-d H:i:s')]);

        return redirect(url('roles'));
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Request $request)
    {
        $role = DB::table('roles')->where('id', $request->id)->delete();
        Session::flash('message', 'Role has been deleted');
        return back();
    }
}
