/*
 * -------------------------------------------------------------------------
 * This file is part of the MindStudio project.
 * Copyright (c) 2025 Huawei Technologies Co.,Ltd.
 *
 * MindStudio is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *
 *          http://license.coscl.org.cn/MulanPSL2
 *
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 * -------------------------------------------------------------------------
 */
#include "TrackInfoManager.h"
#include "DbFlowRepo.h"
namespace Dic::Module::Timeline {
void DbFlowRepo::QueryFlowPointByCategory(const FlowQuery &flowQuery, std::vector<FlowPoint> &flowPointVec) {
    if (flowQuery.cat == "async_task_queue") {
        hostFlowRepo->QueryAsyncTaskQueue(flowQuery, flowPointVec);
    } else if (flowQuery.cat == "fwdbwd") {
        hostFlowRepo->QueryFwdbwd(flowQuery, flowPointVec);
    } else if (flowQuery.cat == "async_npu") {
        QueryAsyncNpu(flowQuery, flowPointVec);
    } else if (flowQuery.cat == "HostToDevice") {
        QueryHostToDevice(flowQuery, flowPointVec);
    } else if (flowQuery.cat == "MsTx") {
        QueryMsTx(flowQuery, flowPointVec);
    }
}

void DbFlowRepo::QueryFlowPointByTimeRange(const FlowQuery &flowQuery, std::vector<FlowPoint> &flowPointVec) {}

void DbFlowRepo::QueryFlowPointByFlowId(const FlowQuery &flowQuery, std::vector<FlowPoint> &flowPointVec) {}

void DbFlowRepo::QueryHostToDevice(const FlowQuery &flowQuery, std::vector<FlowPoint> &flowPointVec) {
    hostFlowRepo->AddCANNFlowPoint(flowQuery, flowPointVec);
    deviceFlowRepo->AddDeviceFlowPoint(flowQuery, flowPointVec);
    std::sort(flowPointVec.begin(), flowPointVec.end());
}

void DbFlowRepo::QueryMsTx(const FlowQuery &flowQuery, std::vector<FlowPoint> &flowPointVec) {
    std::vector<uint64_t> connectionIds = hostFlowRepo->AddMstxFlowPoint(flowQuery, flowPointVec);
    deviceFlowRepo->AddHardWareMstxFlowPoint(flowQuery, flowPointVec, connectionIds);
    std::sort(flowPointVec.begin(), flowPointVec.end());
}

void DbFlowRepo::QueryAsyncNpu(const FlowQuery &flowQuery, std::vector<FlowPoint> &flowPointVec) {
    hostFlowRepo->AddAsyncNpuFlowPoint(flowQuery, flowPointVec);
    deviceFlowRepo->AddDeviceFlowPoint(flowQuery, flowPointVec);
    std::sort(flowPointVec.begin(), flowPointVec.end());
}
}