import router from '@ohos.router';
import { webview } from '@kit.ArkWeb';

@Entry
@Component
struct WebContextMenuExample {
  @State clickMenuItems: MenuItem[] = [
    { icon: '✏️', label: '编辑', action: () => console.info('编辑 clicked') },
    { icon: '📋', label: '复制', action: () => console.info('复制 clicked') },
    { icon: '✂️', label: '剪切', action: () => console.info('剪切 clicked') },
    { icon: '🗑️', label: '删除', action: () => console.info('删除 clicked') }
  ];

  @State longPressMenuItems: MenuItem[] = [
    { icon: '🔍', label: '搜索', action: () => console.info('搜索 clicked') },
    { icon: '🔗', label: '分享', action: () => console.info('分享 clicked') },
    { icon: '⭐', label: '收藏', action: () => console.info('收藏 clicked') },
    { icon: '🔔', label: '提醒', action: () => console.info('提醒 clicked') }
  ];

  // 点击触发的菜单
  @Builder ClickMenuBuilder() {
    Column() {
      ForEach(this.clickMenuItems, (item: MenuItem, index: number) => {
        Row({ space: 8 }) {
          Text(item.icon)
            .fontSize(18)
          Text(item.label)
            .fontSize(15)
            .fontColor('#333333')
        }
        .width('100%')
        .height(44)
        .padding({ left: 16, right: 16 })
        .justifyContent(FlexAlign.Start)
        .onClick(() => {
          item.action();
        })

        if (index < this.clickMenuItems.length - 1) {
          Divider()
            .strokeWidth(0.5)
            .color('#E5E5E5')
            .margin({ left: 16, right: 16 })
        }
      })
    }
    .width(150)
    .backgroundColor('#FFFFFF')
    .borderRadius(8)
    .shadow({ radius: 10, color: '#20000000', offsetX: 0, offsetY: 4 })
  }

  // 长按触发的菜单
  @Builder LongPressMenuBuilder() {
    Column() {
      ForEach(this.longPressMenuItems, (item: MenuItem, index: number) => {
        Row({ space: 8 }) {
          Text(item.icon)
            .fontSize(18)
          Text(item.label)
            .fontSize(15)
            .fontColor('#333333')
        }
        .width('100%')
        .height(44)
        .padding({ left: 16, right: 16 })
        .justifyContent(FlexAlign.Start)
        .onClick(() => {
          item.action();
        })

        if (index < this.longPressMenuItems.length - 1) {
          Divider()
            .strokeWidth(0.5)
            .color('#E5E5E5')
            .margin({ left: 16, right: 16 })
        }
      })
    }
    .width(150)
    .backgroundColor('#FFFFFF')
    .borderRadius(8)
    .shadow({ radius: 10, color: '#20000000', offsetX: 0, offsetY: 4 })
  }

  build() {
    Column({ space: 20 }) {
      // 顶部导航
      Row() {
        Text('←')
          .fontSize(24)
          .fontColor('#333333')
          .onClick(() => {
            router.back();
          })
        Text('Web 菜单演示')
          .fontSize(20)
          .fontWeight(FontWeight.Medium)
          .fontColor('#1a1a1a')
        Blank()
        Text('')
          .width(24)
      }
      .width('100%')
      .padding(16)
      .backgroundColor('#FFFFFF')

      // 内容区域
      Scroll() {
        Column({ space: 20 }) {

          // Web + 禁用触觉
          Column({ space: 12 }) {
            Text('🌐🔇')
              .fontSize(40)
            Text('Web + 禁用触觉')
              .fontSize(18)
              .fontWeight(FontWeight.Medium)
              .fontColor('#1a1a1a')
            Text('点击菜单(无触觉反馈)')
              .fontSize(13)
              .fontColor('#999999')
              .textAlign(TextAlign.Center)

            Web({ src: $rawfile("index.html"), controller: new webview.WebviewController() })
              .width('100%')
              .height(150)
              .backgroundColor('#F5F5F7')
              .borderRadius(8)
              .bindMenu(this.ClickMenuBuilder, {
                hapticFeedbackMode: HapticFeedbackMode.DISABLED
              })
          }
          .width('100%')
          .padding(24)
          .backgroundColor('#FFFFFF')
          .borderRadius(16)
          .shadow({ radius: 8, color: '#10000000', offsetX: 0, offsetY: 2 })

          // Web + 点击菜单示例
          Column({ space: 12 }) {
            Text('🌐')
              .fontSize(40)
            Text('Web + 点击菜单')
              .fontSize(18)
              .fontWeight(FontWeight.Medium)
              .fontColor('#1a1a1a')
            Text('在 Web 区域点击触发菜单')
              .fontSize(13)
              .fontColor('#999999')
              .textAlign(TextAlign.Center)

            Web({ src: $rawfile("index.html"), controller: new webview.WebviewController() })
              .width('100%')
              .height(150)
              .backgroundColor('#F5F5F7')
              .borderRadius(8)
              .bindMenu(this.ClickMenuBuilder, {
                hapticFeedbackMode: HapticFeedbackMode.ENABLED
              })
          }
          .width('100%')
          .padding(24)
          .backgroundColor('#FFFFFF')
          .borderRadius(16)
          .shadow({ radius: 8, color: '#10000000', offsetX: 0, offsetY: 2 })


          // Web + 长按菜单示例
          Column({ space: 12 }) {
            Text('🌐👆')
              .fontSize(40)
            Text('Web + 长按菜单')
              .fontSize(18)
              .fontWeight(FontWeight.Medium)
              .fontColor('#1a1a1a')
            Text('在 Web 区域长按触发菜单')
              .fontSize(13)
              .fontColor('#999999')
              .textAlign(TextAlign.Center)

            Web({ src: $rawfile("index.html"), controller: new webview.WebviewController() })
              .width('100%')
              .height(150)
              .backgroundColor('#F5F5F7')
              .borderRadius(8)
              .bindContextMenu(this.LongPressMenuBuilder, ResponseType.LongPress, {
                hapticFeedbackMode: HapticFeedbackMode.ENABLED
              })
          }
          .width('100%')
          .padding(24)
          .backgroundColor('#FFFFFF')
          .borderRadius(16)
          .shadow({ radius: 8, color: '#10000000', offsetX: 0, offsetY: 2 })



          // Web + AUTO 模式
          Column({ space: 12 }) {
            Text('🌐⚙️')
              .fontSize(40)
            Text('Web + AUTO(无蒙层)')
              .fontSize(18)
              .fontWeight(FontWeight.Medium)
              .fontColor('#1a1a1a')
            Text('点击菜单(无蒙层,不震动)')
              .fontSize(13)
              .fontColor('#999999')
              .textAlign(TextAlign.Center)

            Web({ src: $rawfile("index.html"), controller: new webview.WebviewController() })
              .width('100%')
              .height(150)
              .backgroundColor('#F5F5F7')
              .borderRadius(8)

              .bindMenu(this.ClickMenuBuilder, {
                hapticFeedbackMode: HapticFeedbackMode.AUTO
              })
          }
          .width('100%')
          .padding(24)
          .backgroundColor('#FFFFFF')
          .borderRadius(16)
          .shadow({ radius: 8, color: '#10000000', offsetX: 0, offsetY: 2 })


          // Web + AUTO(有蒙层)
          Column({ space: 12 }) {
            Text('🌐⚙️🔘')
              .fontSize(40)
            Text('Web + AUTO(有蒙层)')
              .fontSize(18)
              .fontWeight(FontWeight.Medium)
              .fontColor('#1a1a1a')
            Text('点击菜单(有蒙层,会震动)')
              .fontSize(13)
              .fontColor('#999999')
              .textAlign(TextAlign.Center)

            Web({ src: $rawfile("index.html"), controller: new webview.WebviewController() })
              .width('100%')
              .height(150)
              .backgroundColor('#F5F5F7')
              .borderRadius(8)
              .bindContextMenu(this.ClickMenuBuilder, ResponseType.RightClick, {
                hapticFeedbackMode: HapticFeedbackMode.AUTO,
                mask: { color: '#80000000' }
              })
              .bindMenu(this.ClickMenuBuilder, {
                hapticFeedbackMode: HapticFeedbackMode.AUTO,
                mask: { color: '#80000000' }
              })

          }
          .width('100%')
          .padding(24)
          .backgroundColor('#FFFFFF')
          .borderRadius(16)
          .shadow({ radius: 8, color: '#10000000', offsetX: 0, offsetY: 2 })


          // Web + 长按 AUTO 模式
          Column({ space: 12 }) {
            Text('🌐⚙️')
              .fontSize(40)
            Text('Web + AUTO(无蒙层)')
              .fontSize(18)
              .fontWeight(FontWeight.Medium)
              .fontColor('#1a1a1a')
            Text('长按菜单(无蒙层,不震动)')
              .fontSize(13)
              .fontColor('#999999')
              .textAlign(TextAlign.Center)

            Web({ src: $rawfile("index.html"), controller: new webview.WebviewController() })
              .width('100%')
              .height(150)
              .backgroundColor('#F5F5F7')
              .borderRadius(8)

              .bindContextMenu(this.ClickMenuBuilder, ResponseType.LongPress, {
                hapticFeedbackMode: HapticFeedbackMode.AUTO,
                mask: { color: '#80000000' }
              })
          }
          .width('100%')
          .padding(24)
          .backgroundColor('#FFFFFF')
          .borderRadius(16)
          .shadow({ radius: 8, color: '#10000000', offsetX: 0, offsetY: 2 })


          // Web + AUTO(有蒙层)
          Column({ space: 12 }) {
            Text('🌐⚙️🔘')
              .fontSize(40)
            Text('Web + AUTO(有蒙层)')
              .fontSize(18)
              .fontWeight(FontWeight.Medium)
              .fontColor('#1a1a1a')
            Text('长按菜单(有蒙层,会震动)')
              .fontSize(13)
              .fontColor('#999999')
              .textAlign(TextAlign.Center)

            Web({ src: $rawfile("index.html"), controller: new webview.WebviewController() })
              .width('100%')
              .height(150)
              .backgroundColor('#F5F5F7')
              .borderRadius(8)
              .bindContextMenu(this.ClickMenuBuilder, ResponseType.LongPress, {
                hapticFeedbackMode: HapticFeedbackMode.AUTO,
                mask: { color: '#80000000' }
              })


          }
          .width('100%')
          .padding(24)
          .backgroundColor('#FFFFFF')
          .borderRadius(16)
          .shadow({ radius: 8, color: '#10000000', offsetX: 0, offsetY: 2 })






        }
        .width('100%')
        .padding(16)
      }
      .layoutWeight(1)
      .scrollBar(BarState.Off)
      .backgroundColor('#f5f5f7')
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#f5f5f7')
  }
}

interface MenuItem {
  icon: string;
  label: string;
  action: () => void;
}