<?php
use function _\filter;
use Mni\FrontYAML\Parser;

class PagesAPI
{
  public function __construct()
  {
  }

  public static function getPageContent($request, $args)
  {
    $task = $args["fourth"];
    $pages = (new Book("../content/pages"))->getContents();
    $content = [];
    foreach ($pages as $page) {
      $entry = [
        "id" => $page["id"],
        "uuid" => $page["uuid"],
        "title" => $page["title"],
        "feature" => $page["feature"],
        "path" => $page["path"],
        "layout" => $page["layout"],
        "tags" => $page["tags"],
        "author" => $page["author"],
        "created" => $page["created"],
        "updated" => $page["updated"],
        "deleted" => $page["deleted"],
        "menu" => $page["menu"],
        "featured" => $page["featured"],
        "published" => $page["published"],
        "slug" => $page["slug"],
        "content" => StringTools::sanitizeContent($page["content"]),
      ];

      array_push($content, $entry);
    }
    switch ($task) {
      case "published":
        $published = filter($content, function ($item) {
          return $item["published"] == true && $item["deleted"] == false;
        });

        $result = ["pages" => $published, "totalItems" => count($published)];
        break;
      case "featured":
        $featured = filter($content, function ($item) {
          return $item["featured"] == true && $item["deleted"] == false;
        });

        $result = [
          "pages" => $featured,
          "totalItems" => count($featured),
        ];
        break;
      case "menu":
        $menu = filter($content, function ($item) {
          return $item["menu"] == true && $item["deleted"] == false;
        });

        $result = ["pages" => $menu, "totalItems" => count($menu)];
        break;
      case "single":
        $uuid = $args["fifth"];
        $page = (new Book("../content/pages"))->findPageById($uuid);

        $entry = [
          "id" => $page["id"],
          "uuid" => $page["uuid"],
          "title" => $page["title"],
          "feature" => $page["feature"],
          "path" => $page["path"],
          "layout" => $page["layout"],
          "tags" => $page["tags"],
          "author" => $page["author"],
          "created" => $page["created"],
          "updated" => $page["updated"],
          "deleted" => $page["deleted"],
          "menu" => $page["menu"],
          "featured" => $page["featured"],
          "published" => $page["published"],
          "slug" => $page["slug"],
          "content" => StringTools::sanitizeContent($page["content"]),
        ];
        $result = $entry;
        break;
      case "tags":
        $result = Settings::getTags();
        break;
      default:
        $result = [
          "message" => "Hm, no task. That's unfortunate",
          "type" => "TASK_NONE",
        ];
        break;
    }
    return $result;
  }

  public static function handlePageTask($request, $args)
  {
    $task = $args["fourth"];
    switch ($task) {
      case "delete":
      case "create":
      case "write":
        $result = (new Book("../content/pages"))->editPage($task, $request);
        break;
      case "add-entry-image":
        $result = ImagesAPI::uploadImage($request);
        break;
      default:
        $result = [
          "message" => "Hm, no task. That's unfortunate",
          "type" => "TASK_NONE",
        ];
        break;
    }

    return $result;
  }
}