<?php
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Slim\Views\Twig;

include "../brain/data/Book.inc.php";

class DashControl
{
  public static function start(
    ServerRequestInterface $request,
    ResponseInterface $response,
    array $args
  ): ResponseInterface {
    $view = Twig::fromRequest($request);
    $pageOptions = [];
    $template = "";
    switch (isset($args["second"]) ? $args["second"] : "index") {
      case "settings":
        if (Session::active()) {
          $config = new Settings();
          $settings = $config->getSettings();
          $themes = $config->getThemes();
          $template = "dash/settings.twig";
          $member = Session::get("member");
          $pageOptions = [
            "title" => "Dash Settings",
            "private" => $settings["global"]["private"],
            "render" => $settings["global"]["renderOnSave"],
            "background" => $settings["global"]["background"],
            "member" => $member,
            "siteTitle" => $settings["global"]["title"],
            "baseUrl" => $settings["global"]["base_url"],
            "desc" => $settings["global"]["descriptions"],
            "lastBackup" => $settings["global"]["last_backup"],
            "currentTheme" => $settings["global"]["theme"],
            "themes" => $themes,
            "mailOption" => $settings["email"]["active"],
            "status" => Session::active(),
          ];
        } else {
          header("Location: /dashboard");
          die();
        }

        break;
      case "navigation":
        if (Session::active()) {
          $config = new Settings();
          $settings = $config->getSettings();
          $template = "dash/navigation.twig";
          $pageOptions = [
            "title" => "Edit Dash Navigation",
            "status" => Session::active(),
            "menu" => $settings["menu"],
          ];
        } else {
          header("Location: /dashboard");
          die();
        }
        break;
      case "pages":
        if (Session::active()) {
          $currentPage = isset($args["fourth"]) ? $args["fourth"] : 1;
          $filter = isset($args["third"]) ? $args["third"] : "all";
          $data = (new Book("../content/pages"))->getPages(
            $currentPage,
            4,
            $filter
          );
          $template = "dash/book.twig";
          $pageOptions = [
            "entryCount" => $data["entryCount"],
            "numOfPages" => $data["numOfPages"],
            "currentPage" => $currentPage,
            "filter" => $data["paginate"]["sort"],
            "stats" => $data["stats"],
            "pages" => $data["pages"],
            "paginate" => $data["paginate"],
            "status" => Session::active(),
          ];
        } else {
          header("Location: /dashboard");
          die();
        }
        break;
      case "page":
        if (Session::active()) {
          $template = "dash/page-edit.twig";
          $mode = $args["third"];
          if ($mode == "edit") {
            $uuid = $args["fourth"];

            $pageOptions = [
              "title" => "Fipamo | Edit Page",
              "page" => (new Book("../content/pages"))->findPageById($uuid),
              "mode" => $mode,
              "status" => Session::active(),
            ];
          } else {
            $pageOptions = [
              "title" => "Fipamo | Create Page",
              "mode" => $mode,
              "status" => Session::active(),
            ];
          }
        } else {
          header("Location: /dashboard");
          die();
        }
        break;
      case "logout":
        Session::kill();
        header("Location: /dashboard");
        die();
        break;
      default:
        $template = "dash/start.twig";
        if (Session::active()) {
          $pageOptions = [
            "title" => "Welcome Back",
            "status" => Session::active(),
            "data" => (new Book("../content/pages"))->getPages(1, 4),
          ];
        } else {
          $pageOptions = [
            "title" => "Welcome to Fipamo",
            "status" => Session::active(),
          ];
        }
        break;
    }

    return $view->render($response, $template, $pageOptions);
  }
}