<?php namespace MapGuesser\Repository;

use DateTime;
use Generator;
use MapGuesser\Database\Query\Select;
use MapGuesser\PersistentData\Model\User;
use MapGuesser\PersistentData\Model\Place;
use MapGuesser\PersistentData\Model\UserPlayedPlace;
use MapGuesser\PersistentData\PersistentDataManager;

class UserPlayedPlaceRepository
{
    private PersistentDataManager $pdm;

    public function __construct()
    {
        $this->pdm = new PersistentDataManager();
    }

    public function getByUser(User $user): Generator
    {
        $select = new Select(\Container::$dbConnection);
        $select->where('user_id', '=', $user->getId());

        yield from $this->pdm->selectMultipleFromDb($select, UserPlayedPlace::class);
    }

    public function getAllByPlace(Place $place): Generator
    {
        $select = new Select(\Container::$dbConnection);
        $select->where('place_id', '=', $place->getId());

        yield from $this->pdm->selectMultipleFromDb($select, UserPlayedPlace::class);
    }

    public function getAllByUser(User $user) : Generator
    {
        $select = new Select(\Container::$dbConnection);
        $select->where('user_id', '=', $user->getId());

        yield from $this->pdm->selectMultipleFromDb($select, UserPlayedPlace::class, true);
    }

    public function getByUserIdAndPlaceId(int $userId, int $placeId) : ?UserPlayedPlace
    {
        $select = new Select(\Container::$dbConnection);
        $select->where('user_id', '=', $userId);
        $select->where('place_id', '=', $placeId);

        return $this->pdm->selectFromDb($select, UserPlayedPlace::class);
    }
}