/*
 * Copyright (c) 2023-2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef FOUNDATION_ACE_ADAPTER_CAPABILITY_BRIDGE_BRIDGEPLUGINMANAGER_INTERNAL_H
#define FOUNDATION_ACE_ADAPTER_CAPABILITY_BRIDGE_BRIDGEPLUGINMANAGER_INTERNAL_H

#import "BridgePluginManager.h"
#import "BridgePlugin.h"

NS_ASSUME_NONNULL_BEGIN

@interface BridgePluginManager (internal)

+ (instancetype)sharedInstance;

- (BOOL)innerRegisterBridgePlugin:(NSString*)bridgeName
                    bridgePlugin:(id)bridgePlugin;

- (BOOL)innerUnRegisterBridgePlugin:(NSString*)bridgeName;

- (BridgePlugin* _Nullable)getPluginWithBridgeName:(NSString*)bridgeName;

- (void)unRegisterBridgePlugin;

- (void)jsCallMethod:(NSString*)bridgeName
                    methodName:(NSString*)methodName
                    param:(NSString*)param;

- (NSString*)jsCallMethodSync:(NSString*)bridgeName
                    methodName:(NSString*)methodName
                    param:(NSString*)param;

- (void)jsSendMethodResult:(NSString*)bridgeName
                    methodName:(NSString*)methodName
                    result:(id)result;

- (void)jsSendMessage:(NSString*)bridgeName
                    data:(id)data;

- (void)jsSendMessageResponse:(NSString*)bridgeName
                    data:(NSString*)data;

- (void)jsCancelMethod:(NSString*)bridgeName
                    methodName:(NSString*)methodName;

- (void)platformCallMethod:(NSString*)bridgeName
                    methodName:(NSString*)methodName
                    param:(NSArray* _Nullable)params
                    reultValueCallback:(void (^)(ResultValue* _Nullable reultValue))callback;

- (ResultValue*)platformCallMethodInnerReult:(NSString*)bridgeName
                    methodName:(NSString*)methodName
                    param:(NSArray* _Nullable)params;
                    
- (void)platformSendMessage:(NSString*)bridgeName data:(id)data;

- (void)platformSendMessageResponse:(NSString*)bridgeName data:(id)data;

- (void)platformSendMethodResult:(NSString*)bridgeName methodName:(NSString*)methodName
                    errorCode:(int)errorCode
                    errorMessage:(NSString*)errorMessage
                    result:(id)result;

- (void)platformSendMessageResponseErrorInfo:(NSString*)bridgeName errorCode:(ErrorCode)errorCode;

- (void)platformWillTerminate;

- (void)jsSendMessageBinary:(NSString*)bridgeName data:(id)data;

- (void)jsCallMethodBinary:(NSString*)bridgeName methodName:(NSString*)methodName param:(NSData*)data;

- (ResultValue*)jsCallMethodBinarySync:(NSString*)bridgeName methodName:(NSString*)methodName param:(NSData*)data;

- (void)platformSendMethodResultBinary:(NSString*)bridgeName
                    methodName:(NSString*)methodName
                    errorCode:(int)errorCode
                    errorMessage:(NSString*)errorMessage
                    result:(id)result;

- (void)platformSendMessageBinary:(NSString*)bridgeName data:(id)data;

- (void)platformCallMethodBinary:(NSString*)bridgeName
                    methodName:(NSString*)methodName
                    param:(NSArray* _Nullable)params
                    reultValueCallback:(void (^)(ResultValue* _Nullable reultValue))callback;

- (ResultValue*)platformCallMethodBinaryInnerResult:(NSString*)bridgeName
                    methodName:(NSString*)methodName
                    param:(NSArray* _Nullable)params;

- (void)jsSendMethodResultBinary:(NSString*)bridgeName
                    methodName:(NSString*)methodName
                    errorCode:(int)errorCode
                    errorMessage:(NSString*)errorMessage
                    result:(id)result;

@end

NS_ASSUME_NONNULL_END

#endif // FOUNDATION_ACE_ADAPTER_CAPABILITY_BRIDGE_BRIDGEPLUGINMANAGER_INTERNAL_H