/*
 * Copyright (c) 2024 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.
 */

import { CommonConstants } from '../constants/CommonConstants';
import WindowModel from '../utils/WindowModel';
import { window } from '@kit.ArkUI';

// 地图顶部标题栏
@Component
export struct TopTitle {
  @Link isShow: boolean; // 是否显示顶部
  @State statusBarHeight: number = 0; // 状态栏高度
  private windowModel: WindowModel = WindowModel.getInstance(); // 窗口管理model

  aboutToAppear(): void {
    const windowStage: window.WindowStage | undefined = AppStorage.get('windowStage');
    if (!windowStage) {
      console.info('windowStage init error!');
      return;
    }
    const windowClass: window.Window | undefined = windowStage.getMainWindowSync();
    windowClass.on('avoidAreaChange', (data) => {
      if (data.type === window.AvoidAreaType.TYPE_SYSTEM) {
        this.statusBarHeight = px2vp(windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM).topRect.height)
        console.info('avoidAreaChange statusBarHeight is:' + this.statusBarHeight);
      }
    });
  }

  build() {
    Column() {
      Column() {
        Row() {
          Image($r("app.media.bottomdrawerslidecase_next"))
            .width($r("app.integer.bottomdrawerslidecase_height_22"))
            .height($r("app.integer.bottomdrawerslidecase_height_22"))
            .margin({
              left: $r("app.integer.bottomdrawerslidecase_number_25"),
              right: $r("app.integer.bottomdrawerslidecase_number_15")
            })
          Text($r("app.string.bottomdrawerslidecase_homeTop"))
            .fontColor(Color.Black)
            .fontSize($r("app.integer.bottomdrawerslidecase_number_20"))
        }
        .backgroundColor(Color.White)
        .width(CommonConstants.FULL_SIZE)
        .height(CommonConstants.PAGE_HEADER_HEIGHT)
      }
      .id('statusHead')
      .backgroundColor(Color.White)
      .padding({ top: this.statusBarHeight })
      .visibility(this.isShow ? Visibility.Visible : Visibility.None)
      .animation({
        duration: 200, // 动画持续时间,单位毫秒
        curve: Curve.Smooth, // 动画曲线
        iterations: 1, // 动画播放次数
        playMode: PlayMode.Normal// 动画播放模式
      })

      Row() {
        Text($r("app.string.bottomdrawerslidecase_homeTop"))
          .margin({
            left: $r("app.integer.bottomdrawerslidecase_number_25"),
            right: $r("app.integer.bottomdrawerslidecase_number_15"),
            top: this.statusBarHeight
          })
          .fontColor(Color.Black)
          .fontSize($r("app.integer.bottomdrawerslidecase_number_18"))
      }
      .width('100%')
      .height($r("app.integer.bottomdrawerslidecase_height_48"))
      .visibility(!this.isShow ? Visibility.Visible : Visibility.None)
    }
  }
}

// listItem布局样式
@Component
export struct SettingItemView {
  build() {
    Column() {
      Image($r("app.media.bottomdrawerslidecase_list_item"))
        .draggable(false)
        .height($r("app.integer.bottomdrawerslidecase_other_itemheight"))
        .width($r('app.string.bottom_drawer_slide_full_percent'))
        .padding({
          left: $r('app.integer.bottom_drawer_slide_padding_left_12'),
          right: $r('app.integer.bottom_drawer_slide_padding_right_12')
        })
        .borderRadius($r("app.integer.bottomdrawerslidecase_number_10"))
    }
  }
}

// Image地图布局样式
@Component
export struct ImageMapView {
  @State imagePositionX: number = 0; // 图片在父组件内X轴位置
  @State imagePositionY: number = 0; // 图片在父组件内Y轴位置
  @State offsetX: number = 0; // 拖动事件结束后图片X轴位置
  @State offsetY: number = 0; // 拖动事件结束后图片Y轴位置

  build() {
    Column() {
      // 背景地图图片
      Image($r("app.media.bottomdrawerslidecase_map"))
        .id("bg_img")
        .width($r("app.integer.bottomdrawerslidecase_number_1000"))
        .height($r("app.integer.bottomdrawerslidecase_number_1000"))
        .objectFit(ImageFit.Contain)
        .translate({ x: this.offsetX, y: this.offsetY })// 以组件左上角为坐标原点进行移动
        .draggable(false) // 图片不可手势拖动,默认为true

    }
    .width($r('app.string.bottom_drawer_slide_full_percent'))
    .height($r('app.string.bottom_drawer_slide_full_percent'))
    .clip(true) // 地图图片超出页面区域时裁剪掉
    .gesture(
      PanGesture({ direction: PanDirection.All, fingers: 1 })
        .onActionUpdate((event: GestureEvent) => {
          this.offsetX = event.offsetX + this.imagePositionX;
          this.offsetY = event.offsetY + this.imagePositionY;
        })
        .onActionEnd((event: GestureEvent) => {
          this.imagePositionX = this.offsetX;
          this.imagePositionY = this.offsetY;
        })
    )
  }
}