<?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 = "";
    if (Setup::status()) {
      switch (isset($args["second"]) ? $args["second"] : "index") {
        case "settings":
          if (Session::active()) {
            $config = new Settings();
            $settings = $config->getSettings();
            $themes = (new Themes())->getThemes(); //$config->getThemes();
            $template = "dash/settings.twig";
            $member = Session::get("member");
            $form_token = Session::get("form_token");
            $updated = new \Moment\Moment($settings["global"]["last_backup"]);
            $pageOptions = [
              "title" => "Dash Settings",
              "private" => $settings["global"]["private"],
              "renderOnSave" => $settings["global"]["renderOnSave"],
              "background" => $settings["global"]["background"],
              "member" => $member,
              "ftoken" => $form_token,
              "siteTitle" => $settings["global"]["title"],
              "baseUrl" => $settings["global"]["base_url"],
              "desc" => $settings["global"]["descriptions"],
              "lastBackup" => $updated->format("Y M D d"),
              "currentTheme" => $settings["global"]["theme"],
              "themes" => $themes,
              "apiStatus" => isset($settings["global"]["externalAPI"])
                ? $settings["global"]["externalAPI"]
                : "false",
              "dynamicRenderStatus" => isset(
                $settings["global"]["dynamicRender"]
              )
                ? $settings["global"]["dynamicRender"]
                : "false",
              "mailOption" => $settings["email"]["active"],
              "mailConfig" => $settings["email"],
              "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"];
            $uuid = $args["fourth"];
            switch ($mode) {
              case "edit":
                $page = (new Book("../content/pages"))->findPageById($uuid);
                $views = [];
                if (str_contains($page["layout"], "index")) {
                  $views = (new Themes())->getCustomIndex();
                } else {
                  $views = (new Themes())->getCustomViews();
                }
                $pageOptions = [
                  "title" => "Fipamo | Edit Page",
                  "page" => $page,
                  "mode" => $mode,
                  "token" => Session::get("form_token"),
                  "status" => Session::active(),
                  "views" => $views,
                ];
                break;
              case "preview":
                $config = new Settings();
                $settings = $config->getSettings();
                $loader = new \Twig\Loader\FilesystemLoader(
                  "../content/themes"
                );
                $display = new \Twig\Environment($loader, []);

                $book = new Book("../content/pages");
                $page = $book->findPageById($uuid);
                $pageOptions = Sorting::page($page);
                $preview =
                  $settings["global"]["theme"] .
                  "/" .
                  $page["layout"] .
                  ".twig";
                $html = $display->render($preview, $pageOptions);
                $response->getBody()->write($html);
                return $response;
                break;
              default:
                $pageOptions = [
                  "title" => "Fipamo | Create Page",
                  "token" => Session::get("form_token"),
                  "mode" => $mode,
                  "status" => Session::active(),
                ];
                break;
            }
          } else {
            header("Location: /dashboard");
            die();
          }
          break;
        case "logout":
          Session::kill();
          header("Location: /dashboard");
          die();
          break;
        case "reset-password":
          $template = "dash/reset-password.twig";
          $pageOptions = [
            "title" => "Reset Password",
          ];
          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;
      }
    } else {
      $template = "dash/init.twig";
      $pageOptions = ["title" => "Fipamo Setup"];
    }

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