<?php namespace MapGuesser\PersistentData\Model;

use DateTime;
use SokoWeb\PersistentData\Model\Model;

class UserPlayedPlace extends Model
{
    protected static string $table = 'user_played_place';

    protected static array $fields = ['user_id', 'place_id', 'last_time', 'occurrences'];

    protected static array $relations = ['user' => User::class, 'place' => Place::class];

    private ?User $user = null;

    private ?int $userId = null;

    private ?Place $place = null;

    private ?int $placeId = null;

    private DateTime $lastTime;

    private int $occurrences = 1;

    public function setUser(User $user): void
    {
        $this->user = $user;
    }

    public function setUserId(int $userId): void
    {
        $this->userId = $userId;
    }

    public function setPlace(Place $place): void
    {
        $this->place = $place;
    }

    public function setPlaceId(int $placeId): void
    {
        $this->placeId = $placeId;
    }

    public function setLastTimeDate(DateTime $lastTime): void
    {
        $this->lastTime = $lastTime;
    }

    public function setLastTime(string $lastTime): void
    {
        $this->lastTime = new DateTime($lastTime);
    }

    public function setOccurrences(int $occurrences): void
    {
        $this->occurrences = $occurrences;
    }

    public function incrementOccurrences(): void
    {
        $this->occurrences++;
    }

    public function getUser(): ?User
    {
        return $this->user;
    }

    public function getUserId(): ?int
    {
        return $this->userId;
    }

    public function getPlace(): ?Place
    {
        return $this->place;
    }

    public function getPlaceId(): ?int
    {
        return $this->placeId;
    }

    public function getLastTimeDate(): DateTime
    {
        return $this->lastTime;
    }

    public function getLastTime(): string
    {
        return $this->lastTime->format('Y-m-d H:i:s');
    }

    public function getOccurrences(): int
    {
        return $this->occurrences;
    }
}