<?php

namespace App\Modules\Admin\Users;

use App\Models\AdminUser;
use App\Models\PasswordResets;
use App\Jobs\Admin\ProcessSendEmailForAdminUserNewPassword;
use Illuminate\Support\Str;

class ResetPassword
{
    public function reset($id)
    {
        $userData = $this->getUserData($id);
        $emailAddress = $userData->email_address;
        $firstName = $userData->first_name;
        $lastName = $userData->last_name;
        $token = Str::random(60);
        $this->savePasswordResets($emailAddress, $token);
        $userData = [
            'email_address' => $emailAddress,
            'first_name' => $firstName,
            'last_name' => $lastName,
            'reset_password_token' => $token,
        ];
        ProcessSendEmailForAdminUserNewPassword::dispatch($emailAddress, $userData)->onQueue('sendemail')->onConnection('jobs_emails');
        return response()->json(['success' => 'Data updated successfully.'])->setStatusCode(201);
    }

    public function getUserData($id)
    {
        $userData = AdminUser::select(
            'conx_users.first_name',
            'conx_users.last_name',
            'conx_users.email_address')
            ->where('conx_users.id', $id)
            ->first();
        return $userData;
    }

    public function savePasswordResets($emailAddress, $token)
    {
        $userData = array(
            'email' => $emailAddress,
            'token' => $token,
            'created_at' => date("Y-m-d H:i:s"),
        );
        PasswordResets::where('email', $emailAddress)->where('token', $token)->delete();
        PasswordResets::create($userData);
    }
}
