/*
 * Copyright (c) 2026 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
 * 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 { MainPageComponent } from 'effectkit';
import PlatformView, { PlatformViewAttribute } from '@arkui-x.platformview';
import { deviceInfo } from '@kit.BasicServicesKit';
import { BuilderNode, NodeController, UIContext } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State title: string = 'PlatformView MapView'
  private osFullNameInfo: string = '';
  private controller: MyNodeController = new MyNodeController();
  private gaodeController: MyNodeController = new MyNodeController();

  aboutToAppear(): void {
    this.osFullNameInfo = deviceInfo.osFullName;
    if (this.osFullNameInfo.startsWith("OpenHarmony")) {
      import ('./harmonyOSPage').then(res => {
        this.controller.node = new BuilderNode(this.getUIContext());
        this.controller.node.build(res.MapComponentBuilder);
      })
      import ('./MapShowController').then(res => {
        this.gaodeController.node = new BuilderNode(this.getUIContext());
        this.gaodeController.node.build(res.MapGaodeComponentBuilder);
      })
    }
  }

  build() {
    Row() {
      Column() {
        MainPageComponent()
        if (this.osFullNameInfo.startsWith("OpenHarmony")) {
          NodeContainer(this.gaodeController).width('100%').height('100%')
        } else if (this.osFullNameInfo.startsWith("Android") ||
                   this.osFullNameInfo.startsWith("iOS") ||
                   this.osFullNameInfo.startsWith("iPadOS")) {
          PlatformView('MapView')
        }
      }
      .width('100%')
    }
    .height('100%')
  }
}

class MyNodeController extends NodeController {
  node?: BuilderNode<[]>;

  makeNode(uiContext: UIContext): FrameNode | null {
    return this.node?.getFrameNode() ?? null;
  }
}