<?php namespace RVR\Repository;

use DateTime;
use Generator;
use SokoWeb\Database\Query\Select;
use RVR\PersistentData\Model\OAuthToken;

class OAuthTokenRepository
{
    public function getById(int $id): ?OAuthToken
    {
        return \Container::$persistentDataManager->selectFromDbById($id, OAuthToken::class);
    }

    public function getByCode(string $code): ?OAuthToken
    {
        $select = new Select(\Container::$dbConnection);
        $select->where('code', '=', $code);

        return \Container::$persistentDataManager->selectFromDb($select, OAuthToken::class);
    }

    public function getByAccessToken(string $accessToken): ?OAuthToken
    {
        $select = new Select(\Container::$dbConnection);
        $select->where('access_token', '=', $accessToken);

        return \Container::$persistentDataManager->selectFromDb($select, OAuthToken::class);
    }

    public function getAllExpired(): Generator
    {
        $select = new Select(\Container::$dbConnection);
        $select->where('expires', '<', (new DateTime())->format('Y-m-d H:i:s'));

        yield from \Container::$persistentDataManager->selectMultipleFromDb($select, OAuthToken::class);
    }
}