<?php
/**
 * Product routes.
 */

$app->router->get("product", 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 ($id) {
        $sql = "SELECT * FROM product WHERE id = ?;";
        $product = $app->db->executeFetch($sql, [$id]);
        $data = [
            "title"    => $product->title,
            "loggedIn" => $isLoggedIn,
            "product"  => $product,
            "isAdmin"  => $isAdmin
        ];

        $app->view->add("product/navbar", $data);
        $app->view->add("product/show", $data);
        $app->page->render($data);
    } else {
        $sql = "SELECT * FROM product;";
        $data = [
            "title"     => "Produkter",
            "loggedIn"  => $isLoggedIn,
            "resultset" => $app->db->executeFetchAll($sql),
            "isAdmin"   => $isAdmin
        ];

        $app->view->add("product/navbar", $data);
        $app->view->add("product/show-all", $data);
        $app->page->render($data);
    }
});

$app->router->get("product/search", function () use ($app) {
    $app->session();
    $app->db->connect();
    $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" : "";

    $search = '%'. $app->request->getGet("search") . '%';

    $sql = "SELECT * FROM product;";
    $resultset = null;
    if ($search) {
        $sql = "SELECT * FROM product WHERE title LIKE ?;";
        $resultset = $app->db->executeFetchAll($sql, [$search]);
    } else {
        $resultset = $app->db->executeFetchAll($sql);
    }

    $data = [
        "title"     => "Sök produkt",
        "loggedIn"  => $isLoggedIn,
        "search"    => $search,
        "resultset" => $resultset,
        "isAdmin"   => $isAdmin
    ];

    $app->view->add("product/navbar", $data);
    $app->view->add("product/search", $data);
    $app->view->add("product/show-all", $data);
    $app->page->render($data);
});

$app->router->get("product/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"    => "Lägg till produkt",
            "loggedIn" => $isLoggedIn,
            "isAdmin"  => $isAdmin
        ];

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

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

    if ($isAdmin) {
        if (isset($post["title"])
            && isset($post["producer"])
            && isset($post["description"])
            && isset($post["url"])
            && isset($post["cost"])
            && isset($post["image"])
            && !empty($post["title"])
        ) {
            if (empty($post["cost"])) {
                $post["cost"] = 0;
            }
            $sql = "INSERT INTO product(title, producer, description, url, cost, image) VALUES (?, ?, ?, ?, ?, ?);";
            $app->db->execute($sql, [
                $post["title"],
                $post["producer"],
                $post["description"],
                $post["url"],
                $post["cost"],
                $post["image"]
            ]);
            header("Location: " . $urlPrefix . "/product?id=" . $app->db->lastInsertId());
            exit;
        } else {
            $data = [
                "title"   => "Error",
                "message" => "Invalid input data."
            ];
            $app->view->add("product/error", $data);
            $app->page->render($data);
        }
    } else {
        header("Location: " . $urlPrefix . "/account/login?error=permission");
        exit;
    }
});

$app->router->get("product/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 product WHERE id = ?;";

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

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

$app->router->post("product/edit", function () use ($app) {
    $app->session();
    $app->db->connect();
    $post = $app->request->getPost();
    $isAdmin = $app->session->has("isAdmin");
    $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["producer"])
            && isset($post["description"])
            && isset($post["url"])
            && isset($post["cost"])
            && isset($post["image"])
            && !empty($post["id"])
            && !empty($post["title"])
        ) {
            if (empty($post["cost"])) {
                $post["cost"] = 0;
            }
            $sql = <<<EOD
UPDATE product SET
    title = ?,
    producer = ?,
    description = ?,
    url = ?,
    cost = ?,
    image = ?
WHERE id = ?;
EOD;
            $app->db->execute($sql, [
                $post["title"],
                $post["producer"],
                $post["description"],
                $post["url"],
                $post["cost"],
                $post["image"],
                $post["id"]
            ]);
            header("Location: " . $urlPrefix . "/product?id=" . $post["id"]);
            exit;
        } else {
            $data = [
                "title"   => "Error",
                "message" => "Invalid input data."
            ];
            $app->view->add("product/error", $data);
            $app->page->render($data);
        }
    } else {
        header("Location: " . $urlPrefix . "/account/login?error=permission");
        exit;
    }
});

$app->router->get("product/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 product WHERE id = ?;";

        $data = [
            "title"    => "Ta bort produkt",
            "loggedIn" => $isLoggedIn,
            "product"  => $app->db->executeFetch($sql, [$id]),
            "isAdmin"  => $isAdmin
        ];

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

$app->router->post("product/delete", function () use ($app) {
    $app->session();
    $app->db->connect();
    $post = $app->request->getPost();
    $isAdmin = $app->session->has("isAdmin");
    $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 product WHERE id = ?;";
            $app->db->execute($sql, [$post["id"]]);
            header("Location: " . $urlPrefix . "/product");
            exit;
        } else {
            $data = [
                "title"   => "Error",
                "message" => "Invalid input data."
            ];
            $app->view->add("product/error", $data);
            $app->page->render($data);
        }
    } else {
        header("Location: " . $urlPrefix . "/account/login?error=permission");
        exit;
    }
});
