<?php

namespace brain\controller;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Slim\Views\Twig;
use brain\data\Settings;
use brain\utility\Sorting;

use function _\find;

class IndexControl
{
    public static function start(
        ServerRequestInterface $request,
        ResponseInterface $response,
        array $args
    ): ResponseInterface {
      //unset($_SESSION);
        $config = new Settings();
        $settings = $config->getSettings();
        $view = Twig::fromRequest($request);
      //checks dynamic render flag for site render status
        if ($settings["global"]["dynamicRender"]) {
            if ($settings["global"]["dynamicRender"] == "true") {
                $loader = new \Twig\Loader\FilesystemLoader("../content/themes");
                $display = new \Twig\Environment($loader, []);
                $template = "";
                $pageOptions = [];

                $pageInfo = [
                "keywords" => isset($settings["global"]["keywords"])
                ? $settings["global"]["keywords"]
                : "fipamo, blog, jamstack, php, markdown, js",
                "description" => $settings["global"]["descriptions"],
                "image" =>
                $settings["global"]["base_url"] . $settings["global"]["background"],
                "baseURL" => $settings["global"]["base_url"],
                ];

                if (isset($args["first"])) {
                    switch ($args["first"]) {
                        case "tags":
                                $template = $settings["global"]["theme"] . "/tags.twig";
                                $tag = trim($args["second"]);
                                $taglist = Sorting::tags();
                                $item = find($taglist, ["tag_name" => $tag]);
                                $pageOptions = [
                            "title" => "Pages Tagged as " . $item["tag_name"],
                            "background" => $pageInfo["image"],
                            "tag_list" => $item["pages"],
                            "info" => $pageInfo,
                            "menu" => $settings["menu"],
                            "dynamicRender" => $settings["global"]["dynamicRender"],
                                ];
                            break;
                        case "archives":
                              $archive = Sorting::archive();
                              $template = $settings["global"]["theme"] . "/archive.twig";
                              $pageOptions = [
                            "title" => "Archive",
                            "background" => $pageInfo["image"],
                            "archives" => $archive,
                            "info" => $pageInfo,
                            "menu" => $settings["menu"],
                            "dynamicRender" => $settings["global"]["dynamicRender"],
                              ];

                            break;
                        default:
                          //check if page is a menu item, if not render along path as usual
                            $page = [];
                            $book = new Book();
                            if (is_numeric($args["first"])) {
                                $page = $book->findPageBySlug($args["third"]);
                            } else {
                                $page = $book->findPageBySlug($args["first"]);
                            }
                            $template =
                            $settings["global"]["theme"] . "/" . $page["layout"] . ".twig";
                            $pageOptions = Sorting::page($page);

                            break;
                    }
                } else {
                  //index
                    $template =
                    $settings["global"]["theme"] . "/" . $page["layout"] . ".twig";
                    $book = new Book("");
                    $page = $book->findPageBySlug();
                    $pageOptions = Sorting::page($page);
                }

                $html = $display->render($template, $pageOptions);
                $response->getBody()->write($html);
                return $response;
            } else {
              //if dynamic flag is false, load up html
                $view = Twig::fromRequest($request);
                $html = file_get_contents("../public/index.html");
                $response->getBody()->write($html);
                return $response;
            }
        } else {
          //if flag is not present, default to static html
            $view = Twig::fromRequest($request);
            $html = file_get_contents("../public/index.html");
            $response->getBody()->write($html);
            return $response;
        }
    }
}