import axios from 'axios'

import i18n from '../i18n'
import { torrentsHost } from './Hosts'

export function humanizeSize(size) {
  if (!size) return ''
  const i = Math.floor(Math.log(size) / Math.log(1024))
  return `${(size / Math.pow(1024, i)).toFixed(2) * 1} ${
    [i18n.t('B'), i18n.t('KB'), i18n.t('MB'), i18n.t('GB'), i18n.t('TB')][i]
  }`
}

export function humanizeSpeed(speed) {
  if (!speed) return ''
  const i = Math.floor(Math.log(speed * 8) / Math.log(1000))
  return `${((speed * 8) / Math.pow(1000, i)).toFixed(0) * 1} ${
    [i18n.t('bps'), i18n.t('kbps'), i18n.t('Mbps'), i18n.t('Gbps'), i18n.t('Tbps')][i]
  }`
}

export function getPeerString(torrent) {
  if (!torrent || !torrent.connected_seeders) return null
  return `${torrent.connected_seeders} · ${torrent.active_peers} / ${torrent.total_peers}`
}

export const shortenText = (text, sympolAmount) =>
  text ? text.slice(0, sympolAmount) + (text.length > sympolAmount ? '…' : '') : ''

export const removeRedundantCharacters = string => {
  let newString = string
  const brackets = [
    ['(', ')'],
    ['[', ']'],
    ['{', '}'],
  ]

  brackets.forEach(el => {
    const leftBracketRegexFormula = `\\${el[0]}`
    const leftBracketRegex = new RegExp(leftBracketRegexFormula, 'g')
    const leftBracketAmount = [...newString.matchAll(leftBracketRegex)].length
    const rightBracketRegexFormula = `\\${el[1]}`
    const rightBracketRegex = new RegExp(rightBracketRegexFormula, 'g')
    const rightBracketAmount = [...newString.matchAll(rightBracketRegex)].length

    if (leftBracketAmount !== rightBracketAmount) {
      const removeFormula = `(\\${el[0]})(?!.*\\1).*`
      const removeRegex = new RegExp(removeFormula, 'g')
      newString = newString.replace(removeRegex, '')
    }
  })

  const hasThreeDotsAtTheEnd = !!newString.match(/\.{3}$/g)

  const trimmedString = newString.replace(/[\\.| ]+$/g, '').trim()

  return hasThreeDotsAtTheEnd ? `${trimmedString}..` : trimmedString
}

export const getTorrents = async () => {
  try {
    const { data } = await axios.post(torrentsHost(), { action: 'list' })
    return data
  } catch (error) {
    throw new Error(null)
  }
}

export const isStandaloneApp = window.matchMedia('screen and (display-mode: standalone)').matches
