<?php

namespace App\Packages\User\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Support\Carbon;

/**
 * Class UserPhoneConfirm
 * @package App\Packages\User\Models
 *
 * @property int $id
 * @property int $user_id
 * @property string $phone_code
 * @property string $phone_number
 * @property string $code
 *
 * @property string|Carbon $created_at
 * @property string|Carbon $updated_at
 *
 * @property-read User $user
 */
class UserPhoneConfirm extends Model
{
	/** @var string */
	protected $table = 'table_user_phone_confirm';

	/**
	 * @param $phoneCode
	 * @param $phoneNumber
	 *
	 * @return UserPhoneConfirm
	 */
	public static function createPhoneConfirm($phoneCode, $phoneNumber)
	{
	    /** @TODO: Refactore to repositoy, and service */
        UserPhoneConfirm::query()
            ->where('phone_code', '=', $phoneCode)
            ->where('phone_number', '=', $phoneNumber)
            ->delete();

		$phoneConfirm = new UserPhoneConfirm();
		$phoneConfirm->phone_code = $phoneCode;
		$phoneConfirm->phone_number = $phoneNumber;
		$phoneConfirm->code = rand(100000,999999);
		$phoneConfirm->save();

		return $phoneConfirm;
	}

    /**
     * @param $phoneCode
     * @param $phoneNumber
     *
     * @return UserPhoneConfirm
     */
    public static function createTestPhoneConfirm($phoneCode, $phoneNumber)
    {
        $phoneConfirm = new UserPhoneConfirm();
        $phoneConfirm->phone_code = $phoneCode;
        $phoneConfirm->phone_number = $phoneNumber;
        $phoneConfirm->code = '000000';
        $phoneConfirm->save();

        return $phoneConfirm;
    }

    /**
     * @param $phoneCode
     *
     * @return Model|null|object|static
     */
	public static function findPhoneCode($phoneCode)
    {
        return UserPhoneConfirm::query()
            ->where('code', '=', $phoneCode)
            ->first();
    }

	/**
	 * @return HasOne
	 */
	public function user()
	{
		return $this->hasOne(User::class, 'id', 'user_id');
	}
}