<?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":
        $body = $request->getParsedBody();
        $passed = true;
        if (!isset($body["form_token"])) {
          $result = [
            "message" => "No form token. Not good, sport.",
            "type" => "TASK_FORM_AUTH",
          ];
        } else {
          if ($body["form_token"] == Session::get("form_token")) {
            //TODO: Verify form fields
            $keys = [
              "id",
              "uuid",
              "layout",
              "current_title",
              "content",
              "title",
              "created",
              "slug",
              "tags",
              "menu",
              "featured",
              "published",
              "form_token",
              "feature_image",
            ];

            foreach ($body as $key => $item) {
              if (!in_array($key, $keys)) {
                //found unnecessary key, so reject submission
                $passed = false;
              }
            }
            if ($passed) {
              $result = (new Book("../content/pages"))->editPage(
                $task,
                $request
              );
            } else {
              $result = [
                "message" =>
                  "Unneccessary key found. Post not authorized, slick.",
                "type" => "TASK_FORM_AUTH",
              ];
            }
          } else {
            $result = [
              "message" => "Form token, auth failed. Uh oh.",
              "type" => "TASK_FORM_AUTH",
            ];
          }
        }

        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;
  }
}
