<?php
require_once 'ArticleManagerDAO.php';
require_once 'Article.php';
/**
 * Klasse: Eine lokale Lösung des ArticleManagerDAO.
 * Schreibt zunächst Daten lokal in das Verzeichnis und kann diese wieder auslesen.
 *
 * @author Niklas Ortmann
 */
class LocalArticleManager implements ArticleManagerDAO {

    private $file;
    private static $instance = null;

    /**
     * Konstruktor
     */
    public function __construct()
    {
        $this->file = __DIR__ . '/../../data/articles.json';
    }

    /**
     * Gibt die LocalArticleManager-Instanz zurück.
     * @return LocalArticleManager
     */
    public static function getInstance()
    {
        if (self::$instance == null) {
            self::$instance = new LocalArticleManager();
        }
        return self::$instance;
    }

    /**
     * Speichert alle Artikel/Beiträge in der Datei.
     * @param $articles
     * @return void
     */
    public function saveArticle($articles)
    {
        file_put_contents(
            $this->file,
            json_encode($articles, JSON_PRETTY_PRINT)
        );
    }

    public function addArticle($title, $content, $author, $category, $tags)
    {
        $articles = $this->getAllArticles();

        $articles[] = [
            "id" => count($articles)+1,
            "title" => $title,
            "content" => $content,
            "author" => $author,
            "category" => $category,
            "tags" => $tags,
            "creationDate" => date("Y-m-d H:i:s")
        ];

        $this->saveArticle($articles);
    }

    public function updateArticle($id, $title, $content, $author)
    {
        // TODO: Implement updateArticle() method.
    }

    public function deleteArticle($id)
    {
        // TODO: Implement deleteArticle() method.
    }

    public function getArticle($id)
    {
        $articles = $this->getAllArticles();

        foreach ($articles as $article) {
            if (isset($article['id']) && $article['id'] == $id) {
                return new Article(intval($article['id']), $article['title'], $article['content'], $article['author'], $article['category'], $article['tags'], $article['creationDate']);
            }
        }

        return null;
    }

    public function getAllArticles(): array
    {
        if (!file_exists($this->file)) {
            return [];
        }

        $json = file_get_contents($this->file);
        $articles = json_decode($json, true);

        return is_array($articles) ? $articles : [];
    }

}
?>