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

import { request } from './request';

interface ResponseBase<T> {
    result: boolean;
    body: T;
    msg?: string;
    errCode?: number;
};

interface ImportFileRequestParams {
    rootPaths: string[];
};
interface ImportFileResponseBody {
    data: FileItem[];
};
export interface FileItem {
    filePath: string;
    tagList: string[];
};
export const importFile = async (params: ImportFileRequestParams): Promise<ResponseBase<ImportFileResponseBody>> => {
    return await request({
        data: params,
        url: '/HistoVisually/ImportProject',
        method: 'post',
    });
};

export const addNewFile = async (params: { filePathList: string[] }): Promise<ResponseBase<ImportFileResponseBody>> => {
    return await request({
        data: params,
        url: '/HistoVisually/AddImportFile',
        method: 'post',
    });
};

export interface ChartsDataRequestParams {
    filePathToTags: Array<{ tag: string; filePath: string; range: { max: number | null, min: number | null } }>;
};
export interface ChartsDataResponseBody {
    data: ChartsDataItem[];
    newTags: FileItem[];
};
interface ChartsDataItem {
    tag: string;
    filePath: string;
    histogramGraph: DataItem[];
};
export interface DataItem {
    step: number;
    bucket: number[];
    bucketLimit: number[];
};

let controller = new AbortController();
export const getChartsData = async (params: ChartsDataRequestParams): Promise<ResponseBase<ChartsDataResponseBody>> => {
    controller.abort();
    controller = new AbortController();
    return await request({
        data: params,
        url: '/HistoVisually/GetHistoData',
        method: 'post',
        signal: controller.signal,
    });
};

export interface NewFileResponseBody {
    data: string[];
};
export const getNewFile = async (): Promise<ResponseBase<NewFileResponseBody>> => {
    return await request({
        url: '/HistoVisually/GetNewFiles',
        method: 'post',
    });
};