<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use Carbon\Carbon;
use App\Models\User;
use Mail;
use Hash;
use Illuminate\Support\Str;

class ForgotPasswordController extends Controller
{
    /**
       * Write code on Method
       *
       * @return response()
       */
      public function showForgetPasswordForm()
      {
         return view('auth.forget_password');
      }

      /**
       * Write code on Method
       *
       * @return response()
       */
      public function submitForgetPasswordForm(Request $request)
      {
          $request->validate([
              'username' => 'required|exists:App\Models\User,username',
          ],[
            'username.required' => 'กรุณากรอกชื่อผู้ใช้',
            'username.exists:App\Models\User,username' => 'ไม่พบชื่อผู้ใช้นี้ในระบบ',
        ]);

          $token = Str::random(64);
          $email = User::where('username', '=', $request->username)->first()->email;

          DB::table('password_resets')->insert([
              'username' => $request->username,
              'email' => $email,
              'token' => $token,
              'created_at' => Carbon::now()
            ]);

          Mail::send('email.forget_password', ['username' => $request->username, 'token' => $token], function($message) use($email){
              $message->to($email);
              $message->subject('ลืมรหัสผ่าน');
          });

          return back()->with('status', 'ลิงค์สำหรับเปลี่ยนรหัสผ่านได้ถูกส่งไปยัง email ที่ลงทะเบียนไว้แล้ว กรุณาตรวจสอบ email อาจจะอยู่ใน junk');
      }
      /**
       * Write code on Method
       *
       * @return response()
       */
      public function showResetPasswordForm($username, $token) {
            return view('auth.forget_password_link', [
                'username'=> $username,
                'token' => $token
            ]);
      }

      /**
       * Write code on Method
       *
       * @return response()
       */
      public function submitResetPasswordForm(Request $request)
      {
          $request->validate([
            'password' => 'required|confirmed|min:6'
          ],[
            'password.required' => 'กรุณากรอกรหัสผ่าน',
            'password.confirmed' => 'รหัสผ่านไม่ตรงกัน กรุณาลองอีกครั้ง',
            'password.min:6' => 'กรุณารหัสผ่านอย่างน้อย 6 ตัวอักษร'
        ]);

          $updatePassword = DB::table('password_resets')
                              ->where([
                                'username' => $request->username,
                                'token' => $request->token
                              ])
                              ->first();

          if(!$updatePassword){
              return back()->withInput()->with('error', 'Invalid token!');
          }

          $user = User::where('username', $request->username)
                      ->update(['password' => Hash::make($request->password)]);

          DB::table('password_resets')->where(['username'=> $request->username])->delete();

          return redirect('/login')->with('feedback', 'เปลี่ยนรหัสผ่านใหม่เรียบร้อย');
      }
}
