import parse from '../util/chatparse_plain.js'
import parseNBT from '../util/parseNBT.js'

export default function load (b) {
  b.players = {}
  b._client.on('player_info', (data) => {
    const buffer2 = {}
    for (const player of data.data) {
      let uuid
      if (player.uuid) {
        uuid = player.uuid
      } else if (player.UUID) {
        uuid = player.UUID
      }
      let displayName
      if (player.displayName !== undefined) {
        displayName = player.displayName
      } else {
        displayName = '{"text":"[[[[ No display name ]]]]"}'
      }
      if (player.player && player.player.name !== undefined) {
        buffer2[uuid] = { realName: player.player.name, displayName: parse(parseNBT(displayName)) }
      } else if (player.name !== undefined) {
        buffer2[uuid] = { realName: player.name, displayName: parse(parseNBT(displayName)) }
      } else if (player.displayName !== undefined) {
        buffer2[uuid] = { displayName: parse(parseNBT(displayName)) }
      }
    }
    for (const uuid in buffer2) {
      if (!b.players[uuid]) b.players[uuid] = { displayName: '', realName: '' }
      let displayName = ''
      let realName = ''
      if (buffer2[uuid].displayName) {
        displayName = buffer2[uuid].displayName
        b.players[uuid].displayName = buffer2[uuid].displayName
      }
      if (buffer2[uuid].realName) {
        realName = buffer2[uuid].realName
        b.players[uuid].realName = buffer2[uuid].realName
      }
      b.emit('playerdata', uuid, displayName, realName)
    }
  })
  b.findUUID = (name) => {
    for (const i in b.players) {
      if (b.players[i].realName === name) {
        return i
      }
    }
    return '00000000-0000-0000-0000-000000000000'
  }
  b.findRealName = (name) => {
    for (const i in b.players) {
      if (b.players[i].displayName === name) {
        return b.players[i].realName
      }
    }
    return '[[[[ no name ]]]]'
  }
  b.findRealNameFromUUID = (uuid) => {
    if (b.players[uuid]) {
      return b.players[uuid].realName
    } else {
      return '[[[[ no name ]]]]'
    }
  }
  b.findDisplayName = (uuid) => {
    if (b.players[uuid]) {
      const displayName = b.players[uuid].displayName.split(' ')
      return displayName[displayName.length - 1]
    } else {
      return '[[[[ No display name ]]]]'
    }
  }
}