import { message } from "antd"
import { isMobile } from "./helper"
import { Shell } from "./shell"



// 从epc中获取 sku god_id 并格式化
const transportEpcList = (epcList: string[]) => epcList.map(_ => {
  const sku = _.slice(0, 8)
  const god_id = _.slice(0, 6)
  return { epc: _, sku: sku.endsWith('FF') ? god_id : sku, god_id: god_id }
})
// 获取改写状态为的方法
const getModifyResult = (epcList: string[], status: any) => new Promise((res, rej) => {
  console.log('开始写入', JSON.stringify(epcList), JSON.stringify(status))
  if (isMobile()) {
    Shell.UHFModify(epcList, status, (result: any) => {
      const failList = result.data.failList
      res({ data: { failList } })
    })
  } else {
    Shell.UHFModify(epcList, status, (openRes: any) => {
      if (openRes)
        setTimeout(() => {
          // 5s以后根据回调获取返回值
          Shell.UHFStopModify((result: any) => {
            // 一个成功的一个失败的
            const failList = result.data?.failList || result.detail.failList
            console.log(result, failList)
            res({ data: { failList } })
          })
        }, 5000)
      else {
        res('打开改写失败')
      }
    })
  }
})

// 扳机事件
enum RFIDTrigeerEnum {
  TRIGGERHOLD = 0,  // 按住
  TRIGGERCLICK = 1, // 单击
  TRIGGERDOUBLECLICK = 2, // 双击
}

enum RFIDTrigeerCodeEnum {
  TRIGGERHOLD = 'triggerHold',  // 按住
  TRIGGERCLICK = 'triggerClick', // 单击
  TRIGGERDOUBLECLICK = 'triggerDoubleClick', // 双击
}




class WindowRFIDTrigerClass {
  eventQuque: any = {
    [RFIDTrigeerCodeEnum.TRIGGERHOLD]: [],
    [RFIDTrigeerCodeEnum.TRIGGERCLICK]: [],
    [RFIDTrigeerCodeEnum.TRIGGERDOUBLECLICK]: [],
  }

  // act触发中标识
  onAct = false

  // rfid设备调用中的标识, 防止你打开了一个弹窗在进行操作 使用按钮打开了另一个弹窗
  onRfidAct = false

  // 增加监听
  addEventListener = (type: RFIDTrigeerCodeEnum, res: any) => {
    this.eventQuque[type]?.push?.(res)
  }

  // 移除监听
  removeEventListener = (type: RFIDTrigeerCodeEnum, res: any) => {
    const index = this.eventQuque[type]?.indexOf(res)
    if (index >= 0)
      this.eventQuque[type].splice(index, 1)
  }

  // 触发对应的最后一个事件
  actEvent = ({ type }: { type: RFIDTrigeerEnum }) => {
    // 防止重复触发
    if (this.onAct) return
    this.onAct = true
    switch (type) {
      // 单击
      case RFIDTrigeerEnum.TRIGGERCLICK:
        this.eventQuque[RFIDTrigeerCodeEnum.TRIGGERCLICK][this.eventQuque[RFIDTrigeerCodeEnum.TRIGGERCLICK].length - 1]?.({})
        break;
      // 双击
      case RFIDTrigeerEnum.TRIGGERDOUBLECLICK:
        this.eventQuque[RFIDTrigeerCodeEnum.TRIGGERDOUBLECLICK][this.eventQuque[RFIDTrigeerCodeEnum.TRIGGERDOUBLECLICK].length - 1]?.({})
        break;
      // 按住
      case RFIDTrigeerEnum.TRIGGERHOLD:
        this.eventQuque[RFIDTrigeerCodeEnum.TRIGGERHOLD][this.eventQuque[RFIDTrigeerCodeEnum.TRIGGERHOLD].length - 1]?.({})
        break;

    }
    this.onAct = false
  }
}

const windowRFIDTriger = new WindowRFIDTrigerClass()
// 注册回调
window['onDeviceEvent'] = windowRFIDTriger.actEvent

export {
  windowRFIDTriger,
  RFIDTrigeerEnum,
  RFIDTrigeerCodeEnum,
  transportEpcList,
  getModifyResult
}