/*
 * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/
 * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/
 *
 * Written by Václav Kubernát <kubervac@fit.cvut.cz>
 *
*/

#include "trompeloeil_doctest.hpp"
#include "ast_commands.hpp"
#include "leaf_data_helpers.hpp"
#include "parser.hpp"
#include "static_schema.hpp"

TEST_CASE("cd")
{
    auto schema = std::make_shared<StaticSchema>();
    schema->addModule("example");
    schema->addModule("second");
    schema->addContainer("/", "example:a");
    schema->addContainer("/", "second:a");
    schema->addContainer("/", "example:b");
    schema->addContainer("/example:a", "example:a2");
    schema->addContainer("/example:b", "example:b2");
    schema->addContainer("/example:a/example:a2", "example:a3");
    schema->addContainer("/example:b/example:b2", "example:b3");
    schema->addList("/", "example:list", {"number"});
    schema->addLeaf("/example:list", "example:number", yang::Int32{});
    schema->addContainer("/example:list", "example:contInList");
    schema->addList("/", "example:twoKeyList", {"number", "name"});
    schema->addLeaf("/example:twoKeyList", "example:number", yang::Int32{});
    schema->addLeaf("/example:twoKeyList", "example:name", yang::String{});
    schema->addRpc("/", "example:launch-nukes");
    schema->addList("/", "example:ports", {"name"});
    schema->addLeaf("/example:ports", "example:name", createEnum({"A", "B", "C"}));
    Parser parser(schema);
    std::string input;
    std::ostringstream errorStream;


    SECTION("valid input")
    {
        cd_ expected;

        SECTION("container")
        {
            SECTION("example:a")
            {
                SECTION("trailing slash")
                {
                    input = "cd example:a/";
                    expected.m_path.m_trailingSlash = TrailingSlash::Present;
                }
                SECTION("no trailing slash")
                {
                    input = "cd example:a";
                }
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("a"));
            }

            SECTION("second:a")
            {
                SECTION("trailing slash")
                {
                    input = "cd second:a/";
                    expected.m_path.m_trailingSlash = TrailingSlash::Present;
                }
                SECTION("no trailing slash")
                {
                    input = "cd second:a";
                }
                expected.m_path.m_nodes.emplace_back(module_{"second"}, container_("a"));
            }

            SECTION("example:b")
            {
                input = "cd example:b";
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("b"));
            }

            SECTION("example:a/a2")
            {
                input = "cd example:a/a2";
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("a"));
                expected.m_path.m_nodes.emplace_back(container_("a2"));
            }

            SECTION("example:a/example:a2")
            {
                input = "cd example:a/example:a2";
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("a"));
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("a2"));
            }

            SECTION("example:b/b2")
            {
                input = "cd example:b/b2";
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("b"));
                expected.m_path.m_nodes.emplace_back(container_("b2"));
            }
        }

        SECTION("list elements")
        {
            SECTION("example:list[number=1]")
            {
                input = "cd example:list[number=1]";
                auto keys = ListInstance {
                    {"number", int32_t{1}}};
                expected.m_path.m_nodes.emplace_back(module_{"example"}, listElement_("list", keys));
            }

            SECTION("example:list[number=1]/contInList")
            {
                input = "cd example:list[number=1]/contInList";
                auto keys = ListInstance {
                    {"number", int32_t{1}}};
                expected.m_path.m_nodes.emplace_back(module_{"example"}, listElement_("list", keys));
                expected.m_path.m_nodes.emplace_back(container_("contInList"));
            }

            SECTION("example:twoKeyList[number=4][name='abcd']")
            {
                input = "cd example:twoKeyList[number=4][name='abcd']";
                auto keys = ListInstance {
                    {"number", int32_t{4}},
                    {"name", std::string{"abcd"}}};
                expected.m_path.m_nodes.emplace_back(module_{"example"}, listElement_("twoKeyList", keys));
            }

            SECTION("enum key type")
            {
                input = "cd example:ports[name=A]";
                auto keys = ListInstance {
                    {"name", enum_{"A"}}};
                expected.m_path.m_nodes.emplace_back(module_{"example"}, listElement_("ports", keys));
            }
        }

        SECTION("whitespace handling")
        {
            SECTION("  cd   example:a     ")
            {
                input = "  cd   example:a     ";
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("a"));
            }
        }

        SECTION("moving up")
        {
            SECTION("moving up when already in root")
            {
                input = "cd ..";
                expected.m_path.m_nodes.emplace_back(nodeup_());
            }

            SECTION("moving up TWICE when already in root")
            {
                input = "cd ../..";
                expected.m_path.m_nodes.emplace_back(nodeup_());
                expected.m_path.m_nodes.emplace_back(nodeup_());
            }

            SECTION("example:a/..")
            {
                input = "cd example:a/..";
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("a"));
                expected.m_path.m_nodes.emplace_back(nodeup_());
            }

            SECTION("example:a/../example:a")
            {
                input = "cd example:a/../example:a";
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("a"));
                expected.m_path.m_nodes.emplace_back(nodeup_());
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("a"));
            }

            SECTION("example:a/../example:a/a2")
            {
                input = "cd example:a/../example:a/a2";
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("a"));
                expected.m_path.m_nodes.emplace_back(nodeup_());
                expected.m_path.m_nodes.emplace_back(module_{"example"}, container_("a"));
                expected.m_path.m_nodes.emplace_back(container_("a2"));
            }
        }

        command_ command = parser.parseCommand(input, errorStream);
        REQUIRE(command.type() == typeid(cd_));
        REQUIRE(boost::get<cd_>(command) == expected);
    }
    SECTION("invalid input")
    {
        SECTION("missing space between a command and its arguments")
        {
            SECTION("cdexample:a")
            {
                input = "cdexample:a";
            }
        }

        SECTION("whitespace between module and nodename")
        {
            SECTION("cd example: a")
            {
                input = "cd example: a";
            }

            SECTION("cd example : a")
            {
                input = "cd example : a";
            }

            SECTION("cd example :a")
            {
                input = "cd example :a";
            }
        }

        SECTION("entering modules")
        {
            SECTION("cd example")
            {
                input = "cd example";
            }

            SECTION("cd example:")
            {
                input = "cd example:";
            }
        }

        SECTION("garbage arguments handling")
        {
            SECTION("cd example:a garbage")
            {
                input = "cd example:a garbage";
            }
            SECTION("cd example:a/a2 garbage")
            {
                input = "cd example:a/a2 garbage";
            }
        }

        SECTION("invalid node identifiers")
        {
            SECTION("example:nonexistent")
            {
                input = "cd example:nonexistent";
            }

            SECTION("example:nonexistent/lol")
            {
                input = "cd example:nonexistent/lol";
            }
        }

        SECTION("invalid module identifiers")
        {
            SECTION("elpmaxe:nonexistent")
            {
                input = "cd elpmaxe:nonexistent";
            }

            SECTION("elpmaxe:nonexistent/example:lol")
            {
                input = "cd elpmaxe:nonexistent/example:lol";
            }
        }

        SECTION("no top-level module")
        {
            SECTION("cd a")
            {
                input = "cd a";
            }

            SECTION("cd example:a/../a")
            {
                input = "cd example:a/../a";
            }
        }

        SECTION("invalid list key identifiers")
        {
            SECTION("example:list")
            {
                input = "cd example:list";
            }

            SECTION("example:list[]")
            {
                input = "cd example:list[]";
            }

            SECTION("example:twoKeyList[invalidKey='4']")
            {
                input = "cd example:twoKeyList[invalidKey='4']";
            }

            SECTION("example:twoKeyList[number=4][number=5]")
            {
                input = "cd example:twoKeyList[number=4][number=5]";
            }

            SECTION("example:twoKeyList[number=4][name='lol'][number=7]")
            {
                input = "cd example:twoKeyList[number=4][name='lol'][number=7]";
            }

            SECTION("example:twoKeyList[number=4]")
            {
                input = "cd example:twoKeyList[number=4]";
            }

            SECTION("strings must be quoted")
            {
                input = "cd example:twoKeyList[number=4][name=abcd]";
            }
        }

        SECTION("no space between list prefix and suffix")
        {
            input = "cd example:list  [number=10]";
        }

        SECTION("cd into rpc")
        {
            input = "cd example:launch-nukes";
        }

        REQUIRE_THROWS_AS(parser.parseCommand(input, errorStream), InvalidCommandException);
    }
}
