<?php

namespace App\Http\Controllers\Auths;

use App\Http\Controllers\Controller;
use App\Models\User;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
use Spatie\Permission\Models\Role;
use Symfony\Component\Console\Input\Input;

class AuthController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function login()
    {
        return view('auth.login');
    }

    public function auth_login(Request $request)
    {
        // validate
        // read more on validation at http://laravel.com/docs/validation
        $rules = array(
            'email'      => 'required|email',
            'password' => 'required'
        );
        $validator = Validator::make($request->all(), $rules);

        // process the login
        if ($validator->fails()) {
            return Redirect::to('login')
                ->withErrors($validator)
                ->withInput($request->except('password'));
        } else {
            try {
                $user = User::where('email', $request->email)->first();

                if (Hash::check($request->password, $user->password)) {
                    // Set Auth
                    Auth::login($user);

                    // Create Session message
                    Session::flash('login-message', [
                        'type' => 'success',
                        'msg' => 'Anda berhasil melakukan Login!'
                    ]);

                    // redirect
                    return Redirect::to('/transaksi');
                } else {
                    // Create Session message
                    Session::flash('message', [
                        'type' => 'warning',
                        'msg' => 'Username atau password anda salah!'
                    ]);

                    // redirect
                    return Redirect::to('login')->withInput($request->except('password'));
                }
            } catch (Exception $e) {
                // Create Session message
                Session::flash('message', [
                    'type' => 'warning',
                    'msg' => 'Username atau password anda salah!'
                ]);

                // redirect
                return Redirect::to('login')->withInput($request->except('password'));
            }
        }
    }

    public function login_proses(Request $request)
    {
        $validator = Validator::make(
            $request->all(),
            [
                'email' => ['required', 'string', 'email', 'exists:users,email'],
                'password' => ['required', 'string'],
            ],
            ['email.exists' => 'Akun anda belum terdaftar']
        );
        $errors = $validator->errors();
        $emailErrorMessage = $errors->first('email');

        if ($validator->fails()) {
            // dd($validator->errors());
            Session::flash('message', [
                'type' => 'warning',
                'msg' => $emailErrorMessage
            ]);
            return Redirect::to('login')->withInput($request->except('password'));
        }

        try {
            if (Auth::attempt($validator->validated(), $request->has('remember_me') ? true : false)) {
                $user = auth()->user();
                session()->put('id', $user->id);
                session()->put('name', $user->name);
                Session::flash('login-message', [
                    'type' => 'success',
                    'msg' => 'Anda berhasil melakukan Login!'
                ]);

                return Redirect::to($this->redirectTo());
            }

            // Create Session message
            Session::flash('message', [
                'type' => 'warning',
                'msg' => 'Username atau password anda salah!'
            ]);

            // redirect
            return Redirect::to('login')->withInput($request->except('password'));
        } catch (\Exception $e) {
            // Create Session message
            Session::flash('message', [
                'type' => 'warning',
                'msg' => 'Terjadi Kesalahan!'
            ]);

            // redirect
            return Redirect::to('login')->withInput($request->except('password'));
        }
    }

    public function redirectTo()
    {
        $role = Auth::user()->role;
        switch ($role[0]->name) {
            case 'Admin':
                return '/dashboard';
                break;
            case 'Kasir':
                return '/transaksi';
                break;

            default:
                return '/transaksi';
                break;
        }
    }

    /**
     * Logout and back to form login
     */
    public function logout()
    {
        // logout and clear data Auth
        Auth::logout();
        return Redirect::to('login');
    }
}