<?php
/**
 * News routes.
 */

$app->router->get("news", function () use ($app) {
    $app->session();
    $app->db->connect();
    $route = $app->request->getGet("route");
    $isAdmin = $app->session->has("isAdmin");
    $isLoggedIn = $app->session->has("isLoggedIn");
    $urlPrefix = $_SERVER["SERVER_NAME"] == "www.student.bth.se"
        ? "/~rasb14/dbwebb-kurser/oophp/me/kmom10/proj/htdocs" : "";

    if ($route) {
        $post = $app->db->executeFetch("SELECT * FROM news WHERE slug = ?;", [$route]);

        $data = [
            "title"    => $post->title,
            "loggedIn" => $isLoggedIn,
            "post"     => $post,
            "isAdmin"  => $isAdmin
        ];

        $app->view->add("news/post", $data);
        $app->page->render($data);
    } else {
        $page = $app->request->getGet("page");
        $posts = $app->db->executeFetch("SELECT COUNT(*) as count FROM news;");
        $pages = ceil($posts->count / 10);

        $resultset = null;
        if ($page) {
            $sql = "SELECT * FROM news ORDER BY published DESC LIMIT 10 OFFSET ?;";
            $resultset = $app->db->executeFetchAll($sql, [($page - 1) * 10]);
        } else {
            $sql = "SELECT * FROM news ORDER BY published DESC LIMIT 10;";
            $resultset = $app->db->executeFetchAll($sql);
        }

        $data = [
            "title"     => "Nyheter",
            "loggedIn"  => $isLoggedIn,
            "resultset" => $resultset,
            "pages"     => $pages,
            "isAdmin"   => $isAdmin
        ];

        $app->view->add("news/posts", $data);
        $app->page->render($data);
    }
});

$app->router->get("news/add", function () use ($app) {
    $app->session();
    $isAdmin = $app->session->has("isAdmin");
    $isLoggedIn = $app->session->has("isLoggedIn");
    $urlPrefix = $_SERVER["SERVER_NAME"] == "www.student.bth.se"
        ? "/~rasb14/dbwebb-kurser/oophp/me/kmom10/proj/htdocs" : "";

    if ($isAdmin) {
        $data = [
            "title"    => "Add",
            "loggedIn" => $isLoggedIn,
            "isAdmin"  => $isAdmin
        ];

        $app->view->add("news/add", $data);
        $app->page->render($data);
    } else {
        header("Location: " . $urlPrefix . "/account/login?error=permission");
        exit;
    }
});

$app->router->post("news/add", function () use ($app) {
    $app->session();
    $app->db->connect();
    $post = $app->request->getPost();
    $isAdmin = $app->session->has("isAdmin");
    $isLoggedIn = $app->session->has("isLoggedIn");
    $urlPrefix = $_SERVER["SERVER_NAME"] == "www.student.bth.se"
        ? "/~rasb14/dbwebb-kurser/oophp/me/kmom10/proj/htdocs" : "";

    if ($isAdmin) {
        if (isset($post["title"]) && isset($post["data"]) && !empty($post["title"])) {
            $tf = new \Rasb14\Util\TextFilter();
            $slug = $tf->slugify($post["title"]);

            $existing = $app->db->executeFetch("SELECT COUNT(*) AS count FROM news WHERE slug = ?;", [$slug]);
            if ($existing->count > 0) {
                $search = $slug . "%";
                $existing = $app->db->executeFetch("SELECT COUNT(*) AS count FROM news WHERE slug LIKE ?;", [$search]);
                $slug = $slug . $existing->count;
            }

            if (isset($post["published"]) && !empty($post["published"])) {
                $sql = "INSERT INTO news(title, slug, data, filter, published) VALUES (?, ?, ?, ?, ?);";
                $app->db->execute($sql, [$post["title"], $slug, $post["data"], $post["filter"], $post["published"]]);
            } else {
                $sql = "INSERT INTO news(title, slug, data, filter) VALUES (?, ?, ?, ?);";
                $app->db->execute($sql, [$post["title"], $slug, $post["data"], $post["filter"]]);
            }
            
            header("Location: " . $urlPrefix . "/news?route=$slug");
            exit;
        } else {
            $data = [
                "title"    => "Error",
                "loggedIn" => $isLoggedIn,
                "message"  => "Invalid input data."
            ];
            $app->view->add("news/error", $data);
            $app->page->render($data);
        }
    } else {
        header("Location: " . $urlPrefix . "/account/login?error=permission");
        exit;
    }
});

$app->router->get("news/edit", function () use ($app) {
    $app->session();
    $app->db->connect();
    $id = $app->request->getGet("id");
    $isAdmin = $app->session->has("isAdmin");
    $isLoggedIn = $app->session->has("isLoggedIn");
    $urlPrefix = $_SERVER["SERVER_NAME"] == "www.student.bth.se"
        ? "/~rasb14/dbwebb-kurser/oophp/me/kmom10/proj/htdocs" : "";

    if ($isAdmin) {
        $sql = "SELECT * FROM news WHERE id = ?;";

        $data = [
            "title"    => "Ändra nyhet",
            "loggedIn" => $isLoggedIn,
            "content"  => $app->db->executeFetch($sql, [$id]),
            "isAdmin"  => $isAdmin
        ];

        $app->view->add("news/edit", $data);
        $app->page->render($data);
    } else {
        header("Location: " . $urlPrefix . "/account/login?error=permission");
        exit;
    }
});

$app->router->post("news/edit", function () use ($app) {
    $app->session();
    $app->db->connect();
    $post = $app->request->getPost();
    $isAdmin = $app->session->has("isAdmin");
    $isLoggedIn = $app->session->has("isLoggedIn");
    $urlPrefix = $_SERVER["SERVER_NAME"] == "www.student.bth.se"
        ? "/~rasb14/dbwebb-kurser/oophp/me/kmom10/proj/htdocs" : "";

    if ($isAdmin) {
        if (isset($post["id"])
            && isset($post["title"])
            && isset($post["data"])
        ) {
            $sql = "UPDATE news SET title = ?, data = ?, filter = ?, published = ? WHERE id = ?;";
            $app->db->execute($sql, [
                $post["title"],
                $post["data"],
                $post["filter"],
                $post["publish"],
                $post["id"]
            ]);
            header("Location: " . $urlPrefix . "/news?id=" . $post["id"]);
            exit;
        } else {
            $data = [
                "title"    => "Error",
                "loggedIn" => $isLoggedIn,
                "message"  => "Invalid input data."
            ];
            $app->view->add("news/error", $data);
            $app->page->render($data);
        }
    } else {
        header("Location: " . $urlPrefix . "/account/login?error=permission");
        exit;
    }
});

$app->router->get("news/delete", function () use ($app) {
    $app->session();
    $app->db->connect();
    $id = $app->request->getGet("id");
    $isAdmin = $app->session->has("isAdmin");
    $isLoggedIn = $app->session->has("isLoggedIn");
    $urlPrefix = $_SERVER["SERVER_NAME"] == "www.student.bth.se"
        ? "/~rasb14/dbwebb-kurser/oophp/me/kmom10/proj/htdocs" : "";

    if ($isAdmin) {
        $sql = "SELECT id, title FROM news WHERE id = ?;";

        $data = [
            "title"    => "Radera nyhet",
            "loggedIn" => $isLoggedIn,
            "content"  => $app->db->executeFetch($sql, [$id])
        ];

        $app->view->add("news/delete", $data);
        $app->page->render($data);
    } else {
        header("Location: " . $urlPrefix . "/account/login?error=permission");
        exit;
    }
});

$app->router->post("news/delete", function () use ($app) {
    $app->session();
    $app->db->connect();
    $post = $app->request->getPost();
    $isAdmin = $app->session->has("isAdmin");
    $isLoggedIn = $app->session->has("isLoggedIn");
    $urlPrefix = $_SERVER["SERVER_NAME"] == "www.student.bth.se"
        ? "/~rasb14/dbwebb-kurser/oophp/me/kmom10/proj/htdocs" : "";

    if ($isAdmin) {
        if (isset($post["id"]) && !empty($post["id"])) {
            $sql = "DELETE FROM news WHERE id = ?;";
            $app->db->execute($sql, [$post["id"]]);
            header("Location: " . $urlPrefix . "/news");
            exit;
        } else {
            $data = [
                "title"    => "Error",
                "loggedIn" => $isLoggedIn,
                "message"  => "Invalid input data."
            ];
            $app->view->add("news/error", $data);
            $app->page->render($data);
        }
    } else {
        header("Location: " . $urlPrefix . "/account/login?error=permission");
        exit;
    }
});
