<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Support\Facades\Auth;
use App\Providers\RouteServiceProvider;
use Illuminate\Support\Facades\Session;
use Illuminate\Foundation\Auth\VerifiesEmails;
use Illuminate\Support\Facades\Storage;

class VerificationController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Email Verification Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling email verification for any
    | user that recently registered with the application. Emails may also
    | be re-sent if the user didn't receive the original email message.
    |
    */

    use VerifiesEmails {
        VerifiesEmails::verify as parentVerify;
    }

    /**
     * Where to redirect users after verification.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('signed')->only('verify');
        $this->middleware('throttle:6,1')->only('verify', 'resend');
    }


    public function resend_mail()
    {
        $user = Auth::user();

        if (Settings('email_verification') != 1) {
            $user->email_verified_at = date('Y-m-d H:m:s');
            $user->save();
        } else {
            $user->sendEmailVerificationNotification();
        }
        return back();
    }

    public function verify(Request $request)
    {
        if ($request->user() && $request->user() != $request->route('id')) {
            Auth::logout();
        }
        if (!$request->user()) {
            $userId = $request->route('id');
            Auth::loginUsingId($userId, true);
        }

        if (!UserDomainCheck()) {
            Auth::logout();
            Toastr::error('Please Login to your domain !', 'Failed');
            return back();
        }

        return $this->parentVerify($request);
    }

    public function show(Request $request)
    {
        if (Storage::exists(md5(Auth::user()->email))) {
            $email = Storage::get(md5(Auth::user()->email));
            $user = User::where('email', trim($email))->first();
            $user->sendEmailVerificationNotification();
            Storage::delete(md5(Auth::user()->email));
        }

        if (Session::has('reg_email')) {
            Session::forget('reg_email');
        }
        if ($request->user()->hasVerifiedEmail()) {
            if (SaasDomain() == 'main' && Auth::user()->lms_id != 1) {
                Toastr::error(trans('common.Operation failed'), trans('common.Failed'));
                Auth::logout();
                return redirect()->route('login');
            }
            return redirect('/');
        }

        return view(theme('auth.verify'));
    }

    /**
     * The user has been verified.
     *
     * @param \Illuminate\Http\Request $request
     * @return mixed
     */
    protected function verified(Request $request)
    {
        //after verified
        if (Auth::check()) {
            send_email(Auth::user(), 'New_Student_Reg', [
                'time' => Carbon::now()->format('d-M-Y, g:i A'),
                'name' => Auth::user()->name
            ]);
        }

    }
}
