/*
* Copyright (c), Huawei Technologies Co., Ltd. 2025-2025.All rights reserved.
 */

#include <gtest/gtest.h>
#include "FileManager/VirtualFile.h"
#include "TestUtil.h"
#include "ScalarVisuallyServer.h"
using namespace Insight::UnitTest;
using namespace Insight::Scalar;
using namespace Insight::Scalar::FileInfo;

namespace Insight::UnitTest {
class VirtualFileTest : public testing::Test
{
protected:
    void SetUp() override
    {
        auto file1 = ScalarVisuallyServer::Instance().AddFile("file1");
        auto file2 = ScalarVisuallyServer::Instance().AddFile("file2");
        file1->UpdateData("train", GenerateRandomData({0, 100}, {2, 3}));
        file2->UpdateData("train", GenerateRandomData({100, 200}, {0, 1}));
        file1->UpdateData("train2", GenerateRandomData({0, 200}, {0, 1}));
    }
};

TEST_F(VirtualFileTest, AddSubFile)
{
    auto virtualFile = std::make_shared<VirtualFile>("merge1");

    virtualFile->AddSubFiles({"file1", "file2"});
    auto containFiles = virtualFile->GetSubFiles();
    EXPECT_EQ(containFiles.size(), 2); // should contains 2 file
    EXPECT_EQ(containFiles.count("file1"), 1);
    EXPECT_EQ(containFiles.count("file2"), 1);
}

TEST_F(VirtualFileTest, GetData)
{
    auto virtualFile = std::make_shared<VirtualFile>("merge1");
    virtualFile->AddSubFiles({"file1", "file2"});
    auto dataViews = GetFileDataView(virtualFile, "train", 0, 200, DataMode::NORMAL);
    EXPECT_EQ(dataViews.size(), 2); // 预期数据视图为大小为2
    EXPECT_EQ(ScalarPointsCheck(dataViews[0].GetElements(), {0, 100}, {2, 3}), true);
    EXPECT_EQ(ScalarPointsCheck(dataViews[1].GetElements(), {100, 200}, {0, 1}), true);
}
}