<?php

namespace brain\api\v1;

use Slim\Views\Twig;
use brain\api\v1\ImagesApi;
use brain\data\Render;
use brain\data\Settings;
use brain\data\Session;
use brain\utility\Maintenance;

class SettingsAPI
{
    public function __construct()
    {
    }

    public static function handleSettingsTask($request, $args, $body = null)
    {
        $task = $args["fourth"];
        switch ($task) {
            case "publish":
                //check settings to see if site is a one pager
                $config = new Settings();
                $settings = $config->getSettings();
                $theme = $settings["global"]["theme"];
                $themeConfig = json_decode(
                    file_get_contents("../content/themes/" . $theme . "/theme.json"),
                    true
                );
                //check to see if dynamic rendering is active
                if (
                    isset($settings["global"]["dynamicRender"]) &&
                    $settings["global"]["dynamicRender"] === "true"
                ) {
                    $result = [
                    "message" => "Dynamic Render Active! You're good!",
                    "type" => "RENDER_SUCCESS",
                      ];
                } else {
                    $render = new Render();
                    if (isset($themeConfig["render"])) {
                        if (!$themeConfig["render"] || $themeConfig["render"] === "false") {
                            $render->renderIndex();
                            $result = [
                            "message" => "Index Rendered. HAND CLAPS",
                            "type" => "RENDER_SUCCESS",
                            ];
                        } else {
                            $render->renderTags();
                            $render->renderArchive();
                            $render->renderPages();
                            $result = [
                            "message" => "Site Rendered. GOOD EFFORT",
                            "type" => "RENDER_SUCCESS",
                            ];
                        }
                    } else {
                        // just incase the render flag is missing
                        $render->renderTags();
                        $render->renderArchive();
                        $render->renderPages();
                        $result = [
                        "message" => "Site Rendered. GOOD EFFORT",
                        "type" => "RENDER_SUCCESS",
                        ];
                    }
                }

                //if render flag is set and false, just render index page for one page sites
                //otherwise, render all pages according to theme template files

                break;
            case "add-avatar":
                $result = ImagesAPI::uploadImage($request, "avatar");
                break;
            case "add-feature-background":
                $result = ImagesAPI::uploadImage($request, "background");
                break;
            case "sync":
                Settings::sync($body);
                $result = [
                "message" => "Settings Synced. You're doing great!",
                "type" => "settingsUpdated",
                ];
                break;
            case "nav-sync":
                Settings::navSync($body);
                $result = [
                "message" => "Navigation updated. Very slick!",
                "type" => "menuUpdated",
                ];
                break;
            default:
                $result = [
                "message" => "Hm, no task. That's unfortunate",
                "type" => "TASK_NONE",
                ];
                break;
        }

        return $result;
    }

    public static function getInfo($request, $args)
    {
        $task = $args["fourth"];
        switch ($task) {
            case "site":
                $config = new Settings();
                $settings = $config->getSettings();
                $data = [
                "title" => $settings["global"]["title"],
                "base_url" => $settings["global"]["base_url"],
                "description" => $settings["global"]["descriptions"],
                ];
                $result = [
                "message" => "Settings Found",
                "type" => "GET_SETTINGS",
                "data" => $data,
                ];
                break;
            case "member":
                if (Session::active()) {
                    $member = $member = Session::get("member");
                    $data = ["handle" => $member["handle"], "email" => $member["email"]];
                    $result = [
                    "message" => "Member Info Found",
                    "type" => "GET_MEMBER_INFO",
                    "data" => $data,
                    ];
                } else {
                    $result = [
                    "message" => "Not logged in. C'mon, bruh",
                    "type" => "TASK_NONE",
                    ];
                }
                break;
            default:
                $result = [
                "message" => "No Settings found. Frowny Face",
                "type" => "TASK_NONE",
                ];
                break;
        }
        return $result;
    }

    public static function createBackup()
    {
        $result = Maintenance::makeBackup();
        return $result;
    }
}