/*
 * -------------------------------------------------------------------------
 * 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.
 * -------------------------------------------------------------------------
 */
import { ClientConnector } from '../connection';
import { errorCenter, WsError } from './ErrorCenter';

export interface RequestOptions {
    silent?: boolean; // 不显示报错信息
}

/**
 * 创建请求方法
 * @param connector 各模块的 connector 实例
 */
export function createRequest(connector: ClientConnector) {
    return async (
        command: string,
        params: any,
        module?: string,
        options?: RequestOptions,
    ): Promise<any> => {
        try {
            const data = await connector.fetch({
                args: { command, params },
                module: module !== undefined ? module : String(command).split('/')[0]?.toLowerCase(),
            });

            return (data as any)?.body;
        } catch (error: any) {
            const wsError = new WsError(error.code, error.message);
            if (!options?.silent && error.code < 9000) {
                errorCenter.handleError(wsError);
            }

            throw wsError;
        }
    };
}