<?php
namespace App\Modules\Mobile;

use App\Models\Worker;
use App\Models\PasswordResets;
use App\Traits\ValidatorTraits;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Mail;

class ForgotPassword {

    use ValidatorTraits;

    public function validate($payload)
    {
        $email_address = $payload->email_address;

        /*======================================================================================================== 
            Validate Query Params
        ========================================================================================================*/
        $rules = array(
            'email_address' => 'required',
        );
        $validate = $this->validateRequest($payload, $rules);
        if ($validate) {
            return $validate;
        }   

        /*======================================================================================================== 
            Validate email address if existed
        ========================================================================================================*/
        $validate = $this->validateEmailAddress($email_address);
        if (!$validate) {
            return response()->json(['errors' => ['Email address not found.']])->setStatusCode(201);
        }
        else {
            $this->sendForgotPasswordEmail($validate);
            return response()->json(['success' => ['Email sent successfully.']])->setStatusCode(201);
        }
    }

    public function validateEmailAddress($email_address)
    {
        $user_data = Worker::select(
                'first_name',
                'last_name',
                'email_address'
            )
            ->where('email_address', $email_address)
            ->limit(1)
            ->get();
        if($user_data->isEmpty()) {
            return false;
        }
        else {
            return $user_data;
        }
    }

    public function sendForgotPasswordEmail($userData)
    {
        $email_address = $userData[0]->email_address;
        $first_name = $userData[0]->first_name;
        $last_name = $userData[0]->last_name;
        $token = Str::random(60);
        $this->savePasswordResets($email_address, $token);
        $user_data = [
            'first_name' => $first_name,
            'last_name' => $last_name,
            'reset_password_token'=> $token
        ];
        Mail::to($email_address)->send(new \App\Mail\Mobile\ForgotPassword($user_data));
    }
    
    public function savePasswordResets($email_address, $token)
    {
        $user_data = array(
            'email' => $email_address,
            'token' => $token,
            'created_at' => date("Y-m-d H:i:s"),
        );
        PasswordResets::where('email', $email_address)->delete();
        PasswordResets::create($user_data);
    }

}