<?php declare(strict_types=1);
namespace openvk\Web\Models\Repositories; 
use openvk\Web\Models\Entities\APIToken;

class APITokens extends Repository
{
    protected $tableName = "api_tokens";
    protected $modelName = "APIToken";
    
    function getByCode(string $code, bool $withRevoked = false): ?APIToken
    {
        $parts  = explode("-", $code);
        $id     = $parts[0];
        $secret = implode("", array_slice($parts, 1, 9));
        
        $token = $this->get((int) $id);
        if(!$token)
            return NULL;
        else if($token->getSecret() !== $secret)
            return NULL;
        else if($token->isRevoked() && !$withRevoked)
            return NULL;
        
        return $token;
    }
    
    function getStaleByUser(int $userId, string $platform, bool $withRevoked = false): ?APIToken
    {
        return $this->toEntity($this->table->where([
            'user'     => $userId,
            'platform' => $platform,
            'deleted'  => $withRevoked,
        ])->fetch());
    }
}