/*
  A utility file for reading and writing JSON files.
*/

'use strict'

const fs = require('fs')

// Writes out a JSON file of any object passed to the function.
// This is used for testing.
function writeJSON (obj, fileName) {
  return new Promise(function (resolve, reject) {
    try {
      const fileStr = JSON.stringify(obj, null, 2)

      fs.writeFile(fileName, fileStr, function (err) {
        if (err) {
          console.error('Error while trying to write file: ', err)
          return reject(err)
        } else {
          // console.log(`${fileName} written successfully!`)
          return resolve()
        }
      })
    } catch (err) {
      console.error('Error trying to write out object in util.js/_writeJSON().', err)
      return reject(err)
    }
  })
}

// Read and parse a JSON file.
function readJSON (fileName) {
  return new Promise(function (resolve, reject) {
    try {
      fs.readFile(fileName, (err, data) => {
        if (err) {
          if (err.code === 'ENOENT') {
            console.log('Admin .json file not found!')
          } else {
            console.log(`err: ${JSON.stringify(err, null, 2)}`)
          }

          return reject(err)
        }

        const obj = JSON.parse(data)

        return resolve(obj)
      })
    } catch (err) {
      console.error('Error trying to read JSON file in util.js/_readJSON().', err)
      return reject(err)
    }
  })
}

module.exports = {
  writeJSON,
  readJSON
}