<?php

namespace App\Http\Controllers\Admin;

use App\AdminAccessRight;
use App\AuditTrail;
use App\Http\Controllers\Controller;
use App\Http\Requests;
use App\Role;
use App\Tools\SmsTools;
use App\User;
use Auth;
use Carbon\Carbon;
use App\Credit;
use http\Exception;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Response;
use Intervention\Image\Facades\Image;
use Laravel\Socialite\Facades\Socialite;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    public function resetPassword(Request $request) {

    }

    public function postLogin(Request $request) {
        //validate request
        $this->validate($request, [
            'login'    => 'required',
            'password' => 'required'
        ]);

        // get our login input
        $login = $request->input('login');

        // check login field
        $login_type = filter_var( $login, FILTER_VALIDATE_EMAIL ) ? 'email' : 'username';

        // merge our login field into the request with either email or username as key
        $request->merge([ $login_type => $login ]);

        $credentials = $request->only($login_type, 'password');
        $credentials['role_id'] = Role::where('name', 'admin')->firstOrFail()->id;

        //check the user trying to login
        if(isset($credentials['username']) && !empty($credentials['username']))
            $user = User::where([
                ['role_id', '=', $credentials['role_id']],
                ['username', '=', $credentials['username']]
            ])->first();
        else
            $user = User::where([
                ['role_id', '=', $credentials['role_id']],
                ['email', '=', $credentials['email']]
            ])->first();

        if (!empty($user) && $user->is_locked) {
            //process locked user
            $request->session()->put('locked_user_id', $user->id);
            return redirect()->route('settings.get_locked_user');
        }

        if (Auth::attempt($credentials, $request->has('remember')))
        {
            $user = Auth::user();
            if (empty($user->wrong_password_attempt_count)) {
                $user->wrong_password_attempt_count = 0;
            }
            if ($user->wrong_password_attempt_count > 0) {
                $user->wrong_password_attempt_count = 0;
                $user->save();
            }

            //update audit_trail
            AuditTrail::create([
                'user_id' => $user->id,
                'username' => $user->username,
                'date' => Carbon::now()->toDateTimeString(),
                'activity' => $user->name.' logged in '
            ]);


            $access = AdminAccessRight::query()->where('user_id',$user->id)->first();


            session([
                'access' =>  $access ?  $access->value : null,
            ]);


            if ($user->must_change_password) {
                //process change user password
                //TODO: Change user password
//                abort(500, 'Your password has to be changed!');
                //return redirect()->route('settings.get_change_password');
                return redirect()->intended('/admin/dashboard');
            } else {

                return redirect()->intended('/admin/dashboard');
            }
        } else {
            if (!empty($user)) {
                if (empty($user->wrong_password_attempt_count)) {
                    $user->wrong_password_attempt_count = 0;
                }
                $user->wrong_password_attempt_count++;
                //lock user password after 21 trial
                if ($user->wrong_password_attempt_count >= 25) {
                    $user->is_locked = true;
                }
                $user->save();
            }
            return Redirect::back()
                ->withInput($request->only('login', 'remember'))
                ->withErrors([
                    'login' => Lang::get('auth.failed'),
                ]);
        }

        return null;
    }
    //social media routes
    public function redirectTogoogle($provider)
    {
        return Socialite::driver($provider)->stateless()->redirect();
    }

    public function handlegoogleCallback($provider)
    {
        try{
            $user = Socialite::driver($provider)->stateless()->user();
        }catch(Exception $e){
            return redirect('login/{provider}');
        }
//        dd($user);
        $authUser =$this->createUser($user);
        Auth::login($authUser,true);
        return redirect('/dashboard');


    }
    public function createUser($user){

        $authUser=User::where('google_id',$user->id)->first();


        if($authUser){
            return $authUser;
        }
        $name = explode(' ' ,$user->name);
        $email=explode('@',$user->email);
        $email_user=User::where('email',$user->email)->first();
        if(empty($email_user)) {
    $user_new= User::create([
        'name' => $user->name,
        'full_name' => $user->name,
        'first_name' => $name[0],
        'username' => $email[0],
        'last_name' => $name[1],
        'google_id' => $user->id,
        'email' => $user->email,
        'avatar' => $user->avatar,
        'role_id' => 1,

    ]);
    Credit::create([
        'user_id'=>$user_new->id,
        'username' => $email[0],
        'price' => '0.03',
        'email_price' => '0.00332',
        'credit_alloted' => '0.15',
        'old_bal' => '0',
        'new_bal' => '0.15',
        'credit_used' => '0',
        'credited' => '0'
    ]);
    return $user_new;
}
else{
    header('Location: http://npontutest.deywuro.com/errorx');
    exit();
}



    }



    public function form_data(Request $request)
    {
        $forms = "<div class='form-group has-feedback'>
									<input type='text' class='form-control' name='login' value='' placeholder='Username or Email' style='font-size: 0.9em;font-family: serif;text-align: center'>
									<span class='glyphicon glyphicon-envelope form-control-feedback'></span>
								</div>
								<div class='form-group has-feedback'>
									<input type='password'  id='password-field' class='form-control' name='password' placeholder='Password' style='font-size: 0.9em;font-family:serif;text-align: center'>
									<span toggle='password-field' class='fa fa-fw fa-eye field-icon toggle-password'></span>
								</div>
								<hr>
								<div class='row'>
								<div class='col-lg-12 text-center' style='margin-top: -1em'>
										<button type='submit' class='btn btn-outline-amber darken-1' style='width: 50%;font-family: serif;color:#fff !important;font-weight: bolder'>
											Sign In
										</button>
								</div>
								</div>";

        return response()->json($forms);
    }

}
