<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

use Illuminate\Http\Request;
use Session;

use App\Helpers\SMSClass;

use App\Models\PublicUser;
use App\Models\VerifyUser;

use Auth;
use Mail;

use App\Mail\WelcomeMail;
use App\Mail\VerifyMail;

class PublicLoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Public Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

   
    public function __construct()
    {
        $this->middleware('guest:publicuser')->except('logout');
    }

    function login()
    {
        $page_title = 'KSSTM Ticketing Application';
        $page_description = 'Some description for the page';
        $logo = "images/logo.png";
        $logoText = "images/logo-text.png";
        $active="active";
        $event_class="schedule-event";
        $button_class="btn-primary";
        $action = __FUNCTION__;

        //echo "login page";
        return view('public.login', compact('page_title', 'page_description','action','logo','logoText','active','event_class','button_class'));

    }

    function register()
    {
        $page_title = 'KSSTM Ticketing Application';
        $page_description = 'Some description for the page';
        $logo = "images/logo.png";
        $logoText = "images/logo-text.png";
        $active="active";
        $event_class="schedule-event";
        $button_class="btn-primary";
        $action = __FUNCTION__;

        Session::forget('OTP');

        //echo "login page";
        return view('public.register', compact('page_title', 'page_description','action','logo','logoText','active','event_class','button_class'));

    }

    public function generateOTP(){
        $otp = mt_rand(1000,9999);
        //$otp = 1234;
        return $otp;
    }

    public function registerpost(Request $request)
    {
        //check if email and phoen number exist in db
        $email = $request->email;
        $phone = $request->phone;
        $password = $request->password;
        $confirm_password = $request->confirm_password;

        $usercheckcount = PublicUser::where('email',$email)->orWhere('phone',$phone)->count();
        if($usercheckcount)
        {
            return json_encode(array('statusCode'=>400,'msg'=>'email or phone number already exist'));
        }
        $otp = $this->generateOTP();

        $phone = $request->phone;

        //send SMS the generated OTP
        $sms = new SMSClass;
        $smsresponse = $sms->sendSMS($otp,$phone);

        Session::put('OTP', $otp);

        return json_encode(array('statusCode'=>200,'msg'=>$smsresponse));
    }

    public function otpverify(Request $request)
    {
        $name = $request->name;
        $email = $request->email;
        $phone = $request->phone;
        $country_code = $request->country_code;
        $otpentered = $request->otpentered;

        $password = bcrypt($request->password);


        $OTP = $request->session()->get('OTP');
        if($OTP==$otpentered) //otp matches
        {
            $response['statusCode'] = 200;
            $response['message'] = "Your Number is Verified.";

            //insert to PublicUser
            $insert_id = PublicUser::create([
                'name' => $name,
                'email' => $email,
                'password' => $password,
                'country_code' => $country_code,
                'status' => 1,
                'phone' => $phone,
                
            ]);


            /*$data = ['message' => 'Welcome to KSSTM Ticketing Application!'];

            //mailing to the registered email
            Mail::to($email)->send(new WelcomeMail($data));*/

            $verifyUser = VerifyUser::create([
                'public_user_id' => $insert_id->id,
                'token' => sha1(time())
              ]);

            Mail::to($insert_id->email)->send(new VerifyMail($insert_id));



        }
        else
        {
            $response['statusCode'] = 400;
            $response['message'] = "OTP doesnot match";
        }

        return json_encode($response);
    }

    public function loginpost(Request $request)
    {
        $phone=$request->phone;
        $password=$request->password;
        

       if (Auth::guard('publicuser')->attempt(['phone' => $phone, 'password' => $password])) {

            $verifyuser = Auth::guard('publicuser')->user()->id;

            if (!Auth::guard('publicuser')->user()->verified) {
                Auth::guard('publicuser')->logout();
                
                return back()->with('warning', 'You need to confirm your account. We have sent you an activation code, please check your email.')->with('verifyuser',$verifyuser);
              }

            if(!Auth::guard('publicuser')->user()->status)
            {
                Auth::guard('publicuser')->logout();

                $request->session()->flush();

                $request->session()->regenerate();
        
                return redirect()->back()->with('error',"Your Credentials are disabled!!");
            }
            else
            {
                //all ok
                return redirect('tickets');
            }


        }
        else
        {
            return redirect()->back()->with('error',"Wrong Credentials!!");
        }
    }

    public function logout(Request $request)
    {
        Auth::guard('publicuser')->logout();

        $request->session()->flush();

        $request->session()->regenerate();

        return redirect('tickets');
    }

    public function verifyUser($token)
    {
      $verifyUser = VerifyUser::where('token', $token)->first();
      if(isset($verifyUser) ){
        $user = $verifyUser->user;
        if(!$user->verified) {
          $verifyUser->user->verified = 1;
          $verifyUser->user->save();
          $status = "Your e-mail is verified. You can now login.";
        } else {
          $status = "Your e-mail is already verified. You can now login.";
        }
      } else {
        return redirect('/user/login')->with('warning', "Sorry your email cannot be identified.");
      }
      return redirect('/user/login')->with('status', $status);
    }

    public function resendverificationmail(Request $request)
    {

        $vid = $request->vid;
        $vmd = $request->vmd;

        if(md5($vid)!=$vmd)
        {
            return json_encode(array('statusCode'=>300,'msg'=>'Something went wrong'));
        }

        $user = PublicUser::where('id',$vid)->first();


      $verifyUser = VerifyUser::create([
                'public_user_id' => $user->id,
                'token' => sha1(time())
              ]);

      Mail::to($user->email)->send(new VerifyMail($user));

      return json_encode(array('statusCode'=>200,'msg'=>'Verification mail re-sent'));

    }


}
