import { createCipheriv, createDecipheriv } from 'crypto'
import BackgroundTimer from 'react-native-background-timer'

export const request = (url, { timeout = 10000, ...options } = {}) => {
  const controller = new global.AbortController()
  const id = BackgroundTimer.setTimeout(() => controller.abort(), timeout)
  return global.fetch(url, {
    ...options,
    signal: controller.signal,
  }).then(response => {
    BackgroundTimer.clearTimeout(id)
    return response.text()
  }).catch(err => {
    // console.log(err, err.code, err.message)
    return Promise.reject(err)
  })
}

export const aesEncrypt = (text, key, iv) => {
  const cipher = createCipheriv('aes-128-cbc', Buffer.from(key, 'base64'), Buffer.from(iv, 'base64'))
  return Buffer.concat([cipher.update(Buffer.from(text)), cipher.final()]).toString('base64')
}

export const aesDecrypt = (text, key, iv) => {
  const decipher = createDecipheriv('aes-128-cbc', Buffer.from(key, 'base64'), Buffer.from(iv, 'base64'))
  return Buffer.concat([decipher.update(Buffer.from(text, 'base64')), decipher.final()]).toString()
}

export const encryptMsg = msg => {
  return msg
  // const keyInfo = global.syncKeyInfo
  // if (!keyInfo) return ''
  // return aesEncrypt(msg, keyInfo.key, keyInfo.iv)
}

export const decryptMsg = enMsg => {
  return enMsg
  // const keyInfo = global.syncKeyInfo
  // if (!keyInfo) return ''
  // let msg = ''
  // try {
  //   msg = aesDecrypt(enMsg, keyInfo.key, keyInfo.iv)
  // } catch (err) {
  //   console.log(err)
  // }
  // return msg
}