/*
  Emoji merger script, quick hack of a tool to:
  - update some missing emoji from an external source
  - sort the emoji
  - remove all multipart emoji (reactions don't allow them)

  Merges emoji from here: https://gist.github.com/oliveratgithub/0bf11a9aff0d6da7b46f1490f86a71eb
  to the simpler format we're using.
*/

// Existing emojis we have
const oldEmojiFilename = '../static/emoji.json'

// The file downloaded from https://gist.github.com/oliveratgithub/0bf11a9aff0d6da7b46f1490f86a71eb
const newEmojiFilename = 'emojis.json'

// Output, replace the static/emoji.json with this file if it looks correct
const outputFilename = 'output.json'

const run = () => {
  const fs = require('fs')

  let newEmojisObject = {}
  let emojisObject = {}

  let data = fs.readFileSync(newEmojiFilename, 'utf8')

  // First filter out anything that's more than one codepoint
  const newEmojis = JSON.parse(data).emojis.filter(e => e.emoji.length <= 2)

  // Create a table with format { shortname: emoji }, remove the :
  newEmojis.forEach(e => {
    const name = e.shortname.slice(1, e.shortname.length - 1).toLowerCase()
    if (name.length > 0) {
      newEmojisObject[name] = e.emoji
    }
  })

  data = fs.readFileSync(oldEmojiFilename, 'utf8')

  emojisObject = JSON.parse(data)

  // Get rid of longer emojis that don't play nice with reactions
  Object.keys(emojisObject).forEach(e => {
    if (emojisObject[e].length > 2) emojisObject[e] = undefined
  })

  // Add new emojis from the new tables to the old table
  Object.keys(newEmojisObject).forEach(e => {
    if (!emojisObject[e] && newEmojisObject[e].length <= 2) {
      emojisObject[e] = newEmojisObject[e]
    }
  })

  // Sort by key
  const sorted = Object.keys(emojisObject).sort().reduce((acc, key) => {
    if (key.length === 0) return acc
    acc[key] = emojisObject[key]
    return acc
  }, {})

  fs.writeFile(outputFilename, JSON.stringify(sorted, null, 2), 'utf8', (err) => {
    if (err) console.log('Error writing file', err)
  })
}

run()