<?php

declare(strict_types=1);

namespace openvk\Web\Models\Repositories;

use Nette\Database\Table\ActiveRow;
use Chandler\Database\DatabaseConnection as DB;
use openvk\Web\Models\Entities\User;
use Chandler\Security\User as ChandlerUser;

class ChandlerUsers
{
    private $context;
    private $users;

    public function __construct()
    {
        $this->context = DB::i()->getContext();
        $this->users   = $this->context->table("ChandlerUsers");
    }

    private function toUser(?ActiveRow $ar): ?ChandlerUser
    {
        return is_null($ar) ? null : (new User($ar))->getChandlerUser();
    }

    public function get(int $id): ?ChandlerUser
    {
        return (new Users())->get($id)->getChandlerUser();
    }

    public function getById(string $UUID): ?ChandlerUser
    {
        $user = $this->users->where("id", $UUID)->fetch();
        return $user ? new ChandlerUser($user) : null;
    }

    public function getList(int $page = 1): \Traversable
    {
        foreach ($this->users as $user) {
            yield new ChandlerUser($user);
        }
    }
}