#include <InfoDirFile.hpp>
#include <iostream>
#include <Communicate.h>

void test1()
{
    DirFileInfo info;
    DirFileInfo info2;
    info.fullPath = "C:\\Users\\Administrator\\Desktop\\test.txt";

    info.name.resize(1024);
    info.name[0] = 'a';
    info.name[10] = 'd';
    info.name[11] = '\0';
    info.name[12] = 'c';

    info.lastModifyTime = 1610995200;
    info.size = 1024;
    info.permission = 0777;
    info.type = FileType::File;

    std::stringstream ss;

    {
        cereal::BinaryOutputArchive archive(ss);
        archive(info);
    }

    std::string ret = ss.str();
    std::cout << "Serialized size: " << ret.size() << " bytes\n";

    {
        std::stringstream inputSs(ret);
        cereal::BinaryInputArchive inputArchive(inputSs);
        inputArchive(info2);
    }
}

void test2()
{
    DirFileInfoVec v;
    DirFileInfoVec v2;
    DirFileInfo d1;
    d1.fullPath = "Java";
    DirFileInfo d2;
    d2.fullPath = "CPP";
    v.vec.push_back(d1);
    v.vec.push_back(d2);

    std::stringstream ss;

    {
        cereal::BinaryOutputArchive archive(ss);
        archive(v);
    }

    std::string ret = ss.str();
    std::cout << "Serialized size: " << ret.size() << " bytes\n";

    {
        std::stringstream inputSs(ret);
        cereal::BinaryInputArchive inputArchive(inputSs);
        inputArchive(v2);
    }
}

void test3()
{
    auto* f = new FrameBuffer();
    f->fid = "127.0.0.1:9898";
    f->tid = "127.0.0.1:9899";
    f->dataType = FBT_CLI_BIN_FILEDATA;

    char* d = nullptr;
    int len = 0;
    if (Communicate::PackBuffer(f, &d, len)) {
        MutBuffer buffer;
        buffer.Push(d, len);
        auto c = Communicate::ParseBuffer(buffer);
        if (c != nullptr) {
            std::cout << "Parse success\n";
        } else {
            std::cout << "Parse failed\n";
        }
        delete[] d;
    }
}

int main()
{
    test3();
    return 0;
}