/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
 * 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.
 */

#import "PlatformBridgePlatformBridgeAbilityViewController.h"
#import <libarkui_ios/BridgePlugin.h>
#import <libarkui_ios/BridgeArray.h>
#import <libarkui_ios/TaskOption.h>
#import "BridgeClass.h"

@interface PlatformBridgePlatformBridgeAbilityViewController ()
@property (nonatomic, strong) BridgeClass* plugin;
@property (nonatomic, strong) BridgeClass* pluginCodec;
@property (nonatomic, strong) BridgeClass* pluginTask;
@end

@implementation PlatformBridgePlatformBridgeAbilityViewController
- (instancetype)initWithInstanceName:(NSString *)instanceName {
    self = [super initWithInstanceName:instanceName];
    if (self) {
        //初始化plugin
        [self initBridgePlugin];
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.hidesBackButton = YES;

//    self.title = @"1.ArkUI通过Bridge调用原生平台";

    self.edgesForExtendedLayout = UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars = YES;
}

- (void)initBridgePlugin {
//    int32_t instancedId = [self getInstanceId];
//    构造方法1. 通过instanceId 构造 此方法在API 11 已经废弃
//    self.plugin = [[BridgeClass alloc] initBridgePlugin:@"Bridge" instanceId:instancedId];

//    构造方法2. 通过bridgeManager 构造
    self.plugin = [[BridgeClass alloc] initBridgePlugin:@"Bridge" bridgeManager:[self getBridgeManager]];
//
//    构造方法3. 通过bridgeType、bridgeManager构造,bridgeType设置编解码类型
    self.pluginCodec = [[BridgeClass alloc] initBridgePlugin:@"BridgeCodec" bridgeManager:[self getBridgeManager] bridgeType:BINARY_TYPE];
//
//    构造方法4. 通过bridgeType、bridgeManager、taskOption构造
//    TaskOption设置队列任务类型 true 为异步串行,false 为异步并行
    TaskOption * taskOption = [[TaskOption alloc] initTaskOption:true];
    self.pluginTask = [[BridgeClass alloc] initBridgePlugin:@"BridgeTask" bridgeManager:[self getBridgeManager] bridgeType:BINARY_TYPE taskOption:taskOption];

//  添加代理
    self.plugin.messageListener = self.plugin;
    self.plugin.methodResult = self.plugin;

    self.pluginCodec.messageListener = self.pluginCodec;
    self.pluginCodec.methodResult = self.pluginCodec;

    self.pluginTask.messageListener = self.pluginTask;
    self.pluginTask.methodResult = self.pluginTask;
}
@end