/*
 * -------------------------------------------------------------------------
 * 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 "IEProtocolResquest.h"
#include "IEProtocolResponse.h"
#include "ServerLog.h"
#include "WsSessionManager.h"
#include "IECurveTableDatailHandler.h"
namespace Dic::Module::IE {
bool IECurveTableDatailHandler::HandleRequest(std::unique_ptr<Dic::Protocol::Request> requestPtr) {
    auto &request = dynamic_cast<IETableRequest &>(*requestPtr);
    std::unique_ptr<IETableViewResponse> responsePtr = std::make_unique<IETableViewResponse>();
    IETableViewResponse &response = *responsePtr;
    SetBaseResponse(request, response);
    PageQuery query;
    query.fileId = request.params.rankId;
    query.curPage = request.params.currentPage;
    query.size = request.params.pageSize;
    query.viewName = request.params.type;
    query.start = request.params.startTime;
    query.end = request.params.endTime;
    query.order = request.params.order;
    query.orderBy = request.params.orderBy;
    if (!std::empty(request.params.type)) {
        QueryViewData(response, query);
    }
    SendResponse(std::move(responsePtr), true);
    return true;
}

void IECurveTableDatailHandler::QueryViewData(IETableViewResponse &response, const PageQuery &query) {
    TableData tableData;
    tableData.att = repo->QueryTableInfoByName(query.fileId, query.viewName);
    if (tableData.att.empty()) {
        return;
    }
    tableData.dataItems = repo->QueryDataByColumnPage(query, tableData.att);
    tableData.count = repo->QueryCountByTableName(query, tableData.att[0].key);
    for (const auto &item : tableData.att) {
        Column column;
        column.name = item.name;
        column.type = item.type;
        column.key = item.key;
        response.data.columnAttr.emplace_back(column);
    }
    for (const auto &item : tableData.dataItems) {
        response.data.columnData.emplace_back(item);
    }
    response.data.totalNum = tableData.count;
}
}