const {
  remote,
  clipboard
} = require('electron');
const { Menu, MenuItem } = remote

// var rightTemplate = [{
//     label: "复制",
//     accelerator: 'ctrl+c',
//     click: function() {
//       console.log('复制',window.getSelection().toString())
//       clipboard.writeText(window.getSelection().toString(), 'selection');
//     }
//   },
//   {
//     label: "粘贴",
//     accelerator: 'ctrl+v',
//     click: function() {
//       console.log('粘贴')
//       clipboard.readText('selection');
//     }
//   }
// ]
// console.log(remote)
// var m = remote.Menu.buildFromTemplate(rightTemplate);

// window.addEventListener('contextmenu', function(e) {
//   e.preventDefault();
//   var hasSelection = window.getSelection().toString()
//   if(hasSelection.length){
//     m.popup({
//       window: remote.getCurrentWindow()
//     });
//   }
// })

// const inputs = document.querySelectorAll("input,textarea")
// console.log(inputs)
// for (const inp of inputs) {
//   inp.addEventListener("focus", function(e){
//     console.log(e)
//     var hasSelection = window.getSelection().toString()
//     if(hasSelection.length){
//       m.popup({
//         window: remote.getCurrentWindow()
//       });
//     }
//   });
// }

// 写入剪贴板方法
function copyString () {
  const str = getSelections() // 获取选中内容
  clipboard.writeText(str) // 写入剪贴板
}
// 获取剪贴版内容写入当前焦点元素中
function printString () {
  if (document.activeElement) {
    const str = clipboard.readText() // 获取剪贴板内容
    document.activeElement.value = str // 写入焦点元素
    var eventchange = new Event('change');
    var eventinput = new Event('input');
    document.activeElement.dispatchEvent(eventchange);
    document.activeElement.dispatchEvent(eventinput);
    clipboard.clear() // 清空剪贴板
  }
}

function getContextMenu(){
  // 监听contextmenu，实现自定义右键菜单
    window.addEventListener('contextmenu', function (e) {
      e.preventDefault()
      let menu = new Menu()
  
      // ↓ 情况一：任何情况下，都显示 复制 和 粘贴 按钮
      //添加菜单功能, label: 菜单名称， accelerator：快捷键，click：点击方法
      // menu.append(new MenuItem({ label: '复制', accelerator: 'CommandOrControl+C', click: copyString }))
      // //添加菜单分割线
      // menu.append(new MenuItem({ type: 'separator' }))
      // //添加菜单功能
      // menu.append(new MenuItem({ label: '粘贴', accelerator: 'CommandOrControl+V', click: printString }))
      // ↑ 情况一
  
      // ↓ 情况二：可复制时，显示复制，可粘贴时显示粘贴
      let flag = false // menu中是否有菜单项，true有，false没有
      const tagName = document.activeElement.tagName // 焦点元素的tagName
      const str = clipboard.readText() // 剪贴板中的内容
      let selectStr = getSelections() // 选中的内容
      const text = e.target.innerText || '' // 目标标签的innerText
      const value = e.target.value || '' // 目标标签的value
  
      if (selectStr) { // 如果有选中内容
        flag = true
        selectStr = selectStr.replace(/\r\n\t\f\v/g,"")
        selectStr = selectStr.replace(/\n/g,"")
        selectStr = selectStr.replace(/\t/g,"")
        selectStr = selectStr.replace(/\f/g,"")
        selectStr = selectStr.replace(/\v/g,"")
        // 在 选中的元素或者输入框 上面点右键，这样在选中后点别处就不会出现右键复制菜单
        if (text.indexOf(selectStr) !== -1 || value.indexOf(selectStr) !== -1) menu.append(new MenuItem({ label: '复制', click: copyString }))
      }
      if (str && (tagName === 'INPUT' || tagName === 'TEXTAREA')) { // 若为输入框 且 剪贴板中有内容，则显示粘贴菜单
        flag = true
        menu.append(new MenuItem({ label: '粘贴', click: printString }))
      }
  
      // ↑ 情况二
      // menu中有菜单项 且（有选中内容 或 剪贴板中有内容）
      if (flag && (getSelections() || str)) {
        // 将此menu菜单作为 当前窗口 remote.getCurrentWindow() 中的上下文菜单弹出。
        menu.popup(remote.getCurrentWindow())
      }
    }, false)
}

// 获取选中内容
function getSelections () {
  var text = ''
  if (window.getSelection) { // 除IE9以下 之外的浏览器
    text = window.getSelection().toString()
  } else if (document.selection && document.selection.type !== 'Control') { //IE9以下，可不考虑
    text = document.selection.createRange().text
  }
  if (text) {
    return text
  }
}

getContextMenu()