<?php
/**
 * Klasse: Artikel
 * Diese Klasse stellt alle Daten eines Beitrags (Beitrag) bereit
 *
 * @author Niklas Ortmann
 */
class Article
{
    private $id;
    private $title;
    private $content;
    private $author;
    private $creationDate;
    private $category;
    private $tags;
    private $likes;

    /**
     * Konstruktor
     *
     * @param $id integer ID des Beitrages
     * @param $title string Titel des Beitrags
     * @param $content string Inhalt des Beitrags
     * @param $author string der Autor des des Beitrages NID
     * @param $category string Kategorie des Beitrages
     * @param $tags string optionale Schlagworte für eine bessere Suche
     * @param $creationDate string Datum der Beitragserstellung
     */
    public function __construct(int $id, string $title, string $content, string $author, string $category, string $tags, string $creationDate, array $likes = [])
    {
        $this->id = $id;
        $this->title = $title;
        $this->content = $content;
        $this->author = $author;
        $this->creationDate = $creationDate;
        $this->category = $category;
        $this->tags = $tags;
        $this->likes = $likes;
    }

    /**
     * Gibt die ID eines Beitrags zurück.
     * @return int
     */
    public function getId(): int
    {
        return $this->id;
    }

    /**
     * Gibt den Titel eines Beitrags zurück.
     * @return string
     */
    public function getTitle(): string
    {
        return $this->title;
    }

    /**
     * Setzt den Titel eines Beitrags
     * @param $title
     * @return void
     */
    public function setTitle($title)
    {
        $this->title = $title;
    }

    /**
     * Gibt den Content eines Beitrags zurück.
     *
     * @return string
     */
    public function getContent(): string
    {
        return $this->content;
    }

    /**
     * Setzt den Content eines Beitrags.
     *
     * @param $content
     * @return void
     */
    public function setContent($content)
    {
        $this->content = $content;
    }

    /**
     * Gibt den Autor eines Beitrags zurück.
     * @return string
     */
    public function getAuthor(): string
    {
        return $this->author;
    }

    /**
     * Setzt einen neuen Autor eines Beitrages.
     * @param string $author
     * @return void
     */
    public function setAuthor(string $author)
    {
        $this->author = $author;
    }

    /**
     * Gibt das Veröffentlichungsdatum des Beitrags zurück.
     * @return string
     */
    public function getCreationDate(): string
    {
        return $this->creationDate;
    }

    /**
     * Gibt die Kategorie eines Beitrags zurück.
     * @return string
     */
    public function getCategory(): string
    {
        return $this->category;
    }

    /**
     * Setzt die Kategorie eines Beitrags.
     * @param string $category
     * @return void
     */
    public function setCategory(string $category)
    {
        $this->category = $category;
    }

    /**
     * Gibt die Schlagworte eines Beitrags zurück.
     * @return string
     */
    public function getTags(): string
    {
        return $this->tags;
    }

    /**
     * Setzt die Schlagworte eines Beitrags.
     * @param string $tags
     */
    public function setTags(string $tags)
    {
        $this->tags = $tags;
    }

    /**
     * Gibt alle User-IDs zurück, die diesen Beitrag geliked haben.
     * @return array
     */
    public function getLikes(): array
    {
        return $this->likes;
    }

    /**
     * Gibt die Gesamtzahl der Likes zurück.
     * @return int
     */
    public function getLikeCount(): int
    {
        return count($this->likes);
    }

    /**
     * Prüft, ob ein bestimmter Nutzer den Beitrag bereits geliked hat.
     *
     * @param string $userId
     * @return bool
     */
    public function hasLiked(string $userId): bool
    {
        return in_array($userId, $this->likes);
    }

}
?>