/*
 * 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"}));
    schema->addLeaf("/", "example:myLeaf", yang::Int32{});
    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";
        }

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

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