/*
 * 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 "completion.hpp"
#include "leaf_data_helpers.hpp"
#include "libyang_utils.hpp"
#include "pretty_printers.hpp"
#include "utils.hpp"

TEST_CASE("utils")
{
    SECTION("filterByPrefix")
    {
        std::set<Completion> set{{"ahoj"}, {"coze"}, {"copak"}, {"aha"}, {"polivka"}};

        REQUIRE((filterByPrefix(set, "a") == std::set<Completion>{{"ahoj"}, {"aha"}}));
        REQUIRE((filterByPrefix(set, "ah") == std::set<Completion>{{"ahoj"}, {"aha"}}));
        REQUIRE((filterByPrefix(set, "aho") == std::set<Completion>{{"ahoj"}}));
        REQUIRE((filterByPrefix(set, "polivka") == std::set<Completion>{{"polivka"}}));
        REQUIRE((filterByPrefix(set, "polivkax") == std::set<Completion>{}));
        REQUIRE((filterByPrefix(set, "co") == std::set<Completion>{{"copak"}, {"coze"}}));
    }

    SECTION("joinPaths")
    {
        std::string prefix, suffix, result;

        SECTION("regular")
        {
            prefix = "/example:a";
            suffix = "leaf";
            result = "/example:a/leaf";
        }

        SECTION("no prefix - absolute path")
        {
            suffix = "/example:a/leaf";
            result = "/example:a/leaf";
        }

        SECTION("no prefix - relative path")
        {
            suffix = "example:a/leaf";
            result = "example:a/leaf";
        }

        SECTION("no suffix")
        {
            prefix = "/example:a/leaf";
            result = "/example:a/leaf";
        }

        SECTION("at root")
        {
            prefix = "/";
            suffix = "example:a";
            result = "/example:a";
        }

        SECTION("trailing slash")
        {
            prefix = "/example:a";
            suffix = "/";
            result = "/example:a/";
        }

        SECTION("prefix ends with slash")
        {
            prefix = "/example:a/";
            suffix = "leaf";
            result = "/example:a/leaf";
        }

        SECTION("suffix starts with slash")
        {
            prefix = "/example:a";
            suffix = "/leaf";
            result = "/example:a/leaf";
        }

        SECTION("slashes all the way to eleven")
        {
            prefix = "/example:a/";
            suffix = "/leaf";
            result = "/example:a/leaf";
        }

        REQUIRE(joinPaths(prefix, suffix) == result);
    }

    SECTION("leafDataTypeToString")
    {
        yang::LeafDataType type;
        std::string expected;
        SECTION("union")
        {
            type = yang::Union{{
                yang::TypeInfo{yang::String{}},
                yang::TypeInfo{createEnum({"foo", "bar"})},
                yang::TypeInfo{yang::Int8{}},
                yang::TypeInfo{yang::Int64{}},
            }};
            expected = "a string, an enum, an 8-bit integer, a 64-bit integer";
        }

        REQUIRE(leafDataTypeToString(type) == expected);
    }
}

const auto schema = R"(
module test-schema {
    namespace "http://example.com/ayyyy";
    prefix AHOJ;

    leaf int8 {
        type int8;
    }
    leaf int16 {
        type int16;
    }
    leaf int32 {
        type int32;
    }
    leaf int64 {
        type int64;
    }
    leaf uint8 {
        type uint8;
    }
    leaf uint16 {
        type uint16;
    }
    leaf uint32 {
        type uint32;
    }
    leaf uint64 {
        type uint64;
    }
    leaf boolean {
        type boolean;
    }
    leaf string {
        type string;
    }
    leaf enum {
        type enumeration {
            enum A;
            enum B;
            enum C;
        }
    }
    identity food;
    identity apple {
        base "food";
    }
    leaf identityRef {
        type identityref {
            base "food";
        }
    }
    leaf binary {
        type binary;
    }
    leaf empty {
        type empty;
    }
    leaf bits {
        type bits {
            bit a;
            bit b;
            bit AHOJ;
        }
    }
    typedef capabilitiesType {
        type bits {
            bit router;
            bit switch;
            bit hub;
        }
    }
    leaf capabilities {
        type capabilitiesType;
    }
    leaf dec64 {
        type decimal64 {
            fraction-digits 5;
        }
    }

    list stuff {
        key "name";
        leaf name {
            type string;
        }
    }

    leaf leafRefPresent {
        type leafref {
            path ../stuff/name;
        }
    }

    leaf leafRefNonPresent {
        type leafref {
            path ../stuff/name;
        }
    }

    container users {
        config false;
        list userList {
            leaf name {
                type string;
            }
        }
    }
}
)";

const auto data = R"(
{
    "test-schema:int8": 8,
    "test-schema:int16": 300,
    "test-schema:int32": -300,
    "test-schema:int64": "-999999999999999",
    "test-schema:uint8": 8,
    "test-schema:uint16": 300,
    "test-schema:uint32": 300,
    "test-schema:uint64": "999999999999999",
    "test-schema:boolean": true,
    "test-schema:string": "AHOJ",
    "test-schema:enum": "A",
    "test-schema:identityRef": "apple",
    "test-schema:binary": "QUhPSgo=",
    "test-schema:empty": "",
    "test-schema:bits": "a AHOJ",
    "test-schema:capabilities": "switch hub",
    "test-schema:dec64": "43242.43260",
    "test-schema:stuff": [
        {
            "name": "Xaver"
        }
    ],
    "test-schema:leafRefPresent": "Xaver",
    "test-schema:leafRefNonPresent": "Lucas",
    "test-schema:users": {
        "userList": [
            {
                "name": "John"
            },
            {
                "name": "Aneta"
            },
            {
                "name": "Aneta"
            }
        ]
    }
}
)";


TEST_CASE("libyang_utils")
{
    auto ctx = std::make_shared<libyang::Context>();
    ctx->parse_module_mem(schema, LYS_IN_YANG);
    auto dataNode = ctx->parse_data_mem(data, LYD_JSON, LYD_OPT_DATA_NO_YANGLIB | LYD_OPT_NOEXTDEPS | LYD_OPT_STRICT);

    SECTION("leafValueFromNode")
    {
        std::string path;
        leaf_data_ expectedLeafData;

        SECTION("test-schema:int8")
        {
            path = "test-schema:int8";
            expectedLeafData = int8_t{8};
        }
        SECTION("test-schema:int16")
        {
            path = "test-schema:int16";
            expectedLeafData = int16_t{300};
        }
        SECTION("test-schema:int32")
        {
            path = "test-schema:int32";
            expectedLeafData = int32_t{-300};
        }
        SECTION("test-schema:int64")
        {
            path = "test-schema:int64";
            expectedLeafData = int64_t{-999999999999999};
        }
        SECTION("test-schema:uint8")
        {
            path = "test-schema:uint8";
            expectedLeafData = uint8_t{8};
        }
        SECTION("test-schema:uint16")
        {
            path = "test-schema:uint16";
            expectedLeafData = uint16_t{300};
        }
        SECTION("test-schema:uint32")
        {
            path = "test-schema:uint32";
            expectedLeafData = uint32_t{300};
        }
        SECTION("test-schema:uint64")
        {
            path = "test-schema:uint64";
            expectedLeafData = uint64_t{999999999999999};
        }
        SECTION("test-schema:boolean")
        {
            path = "test-schema:boolean";
            expectedLeafData = true;
        }
        SECTION("test-schema:string")
        {
            path = "test-schema:string";
            expectedLeafData = std::string{"AHOJ"};
        }
        SECTION("test-schema:enum")
        {
            path = "test-schema:enum";
            expectedLeafData = enum_{"A"};
        }
        SECTION("test-schema:identityRef")
        {
            path = "test-schema:identityRef";
            expectedLeafData = identityRef_{"test-schema", "apple"};
        }
        SECTION("test-schema:binary")
        {
            path = "test-schema:binary";
            expectedLeafData = binary_{"QUhPSgo="};
        }
        SECTION("test-schema:empty")
        {
            path = "test-schema:empty";
            expectedLeafData = empty_{};
        }
        SECTION("test-schema:bits")
        {
            path = "test-schema:bits";
            expectedLeafData = bits_{{"a", "AHOJ"}};
        }
        SECTION("test-schema:dec64")
        {
            path = "test-schema:dec64";
            expectedLeafData = 43242.43260;
        }
        SECTION("test-schema:leafRefPresent")
        {
            path = "test-schema:leafRefPresent";
            expectedLeafData = std::string{"Xaver"};
        }
        SECTION("test-schema:leafRefNonPresent")
        {
            path = "test-schema:leafRefNonPresent";
            expectedLeafData = std::string{"Lucas"};
        }

        auto leaf = dataNode->find_path(("/" + path).c_str());
        REQUIRE(leaf->number() == 1);
        auto firstLeaf = std::make_shared<libyang::Data_Node_Leaf_List>(leaf->data().front());
        REQUIRE(leafValueFromNode(firstLeaf) == expectedLeafData);
    }

    SECTION("lyNodesToTree")
    {
        DatastoreAccess::Tree expected{
            {"/test-schema:int8", int8_t{8}},
            {"/test-schema:int16", int16_t{300}},
            {"/test-schema:int32", int32_t{-300}},
            {"/test-schema:int64", int64_t{-999999999999999}},
            {"/test-schema:uint8", uint8_t{8}},
            {"/test-schema:uint16", uint16_t{300}},
            {"/test-schema:uint32", uint32_t{300}},
            {"/test-schema:uint64", uint64_t{999999999999999}},
            {"/test-schema:boolean", true},
            {"/test-schema:string", std::string{"AHOJ"}},
            {"/test-schema:enum", enum_{"A"}},
            {"/test-schema:identityRef", identityRef_{"test-schema", "apple"}},
            {"/test-schema:binary", binary_{"QUhPSgo="}},
            {"/test-schema:empty", empty_{}},
            {"/test-schema:bits", bits_{{"a", "AHOJ"}}},
            {"/test-schema:capabilities", bits_{{"switch", "hub"}}},
            {"/test-schema:dec64", 43242.432600},
            {"/test-schema:stuff[name='Xaver']", special_{SpecialValue::List}},
            {"/test-schema:stuff[name='Xaver']/name", std::string{"Xaver"}},
            {"/test-schema:leafRefPresent", std::string{"Xaver"}},
            {"/test-schema:leafRefNonPresent", std::string{"Lucas"}},
            {"/test-schema:users/userList[1]", special_{SpecialValue::List}},
            {"/test-schema:users/userList[1]/name", std::string{"John"}},
            {"/test-schema:users/userList[2]", special_{SpecialValue::List}},
            {"/test-schema:users/userList[2]/name", std::string{"Aneta"}},
            {"/test-schema:users/userList[3]", special_{SpecialValue::List}},
            {"/test-schema:users/userList[3]/name", std::string{"Aneta"}},
        };

        DatastoreAccess::Tree tree;
        lyNodesToTree(tree, {dataNode->tree_for()});
        REQUIRE(tree == expected);
    }
}
