<?php

namespace App\Packages\User\Models;

use App\Packages\Core\Traits\RepositoryTrait;
use App\Packages\User\Repository\UserEmailTokenRepository;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;

/**
 * Class UserEmailToken
 * @package App\Packages\User\Models
 *
 * @property int $id
 * @property string $email
 * @property string $token
 *
 * @property Carbon|string $created_at
 * @property Carbon|string $updated_at
 *
 * @method static UserEmailTokenRepository repository()
 */
class UserEmailToken extends Model {

    use RepositoryTrait;

    protected $table = 'table_user_email_token';

    protected $dates = [
        'created_at',
        'update_at'
    ];

    /** @var string */
    public static $repositoryClass = UserEmailTokenRepository::class;

    /**
     * @param string $email
     * @return UserEmailToken
     * @throws \Exception
     */
    public static function createToken($email)
    {
        /** Delete old token */
        $old = UserEmailToken::repository()->findByEmail($email);
        if ($old) $old->delete();

        $emailToken = new UserEmailToken();

        $token = $emailToken->generateToken();
        $findToken = UserEmailtoken::repository()->findByToken($token);
        if ($findToken) {
            $token = $emailToken->generateToken();
        }

        $emailToken->email = $email;
        $emailToken->token = $token;
        $emailToken->save();

        return $emailToken;
    }

    public function generateToken()
    {
        return sha1(time());
    }

}