module.exports = {
  ReadFile: ReadFile,
  WriteFile: WriteFile,
  writeFileAsync: WriteFileAsync,
  AppendToFile: AppendToFile,
  Beep: Beep,
  WriteBackup: WriteBackup,
  FileExists: FileExists,
  CreatePath: CreatePath
}

var fs = require('fs')

var logger = require('../utils/logger.js')

const dataFile = './public/data.json'

function ReadFile (name) {
  if (!FileExists(name)) { throw new Error('No such file: ' + name) }
  return fs.readFileSync(name, 'utf8')
}

function FileExists (path) {
  return fs.existsSync(path)
}

function CreatePath (path, onlyPath) {
  if (FileExists(path)) { return }

  var p = path.split('/')
  var currDir = p[0]
  for (var i = 1; i < p.length; i++) {
    if (currDir !== '' && !fs.existsSync(currDir)) {
      try {
        fs.mkdirSync(currDir)
      } catch (e) { console.log('Failed to make ' + currDir + ' directory... ') }
    }
    currDir += '/' + p[i]
  }
  if (onlyPath === undefined || onlyPath === false) { fs.writeFileSync(path, '') } else { fs.mkdirSync(path) }
}

function WriteFile (content, path) {
  CreatePath(path)
  fs.writeFileSync(path, content)
}

function WriteFileAsync (content, path) {
  CreatePath(path)
  fs.writeFile(path, content, function (err) {
    if (err) {
      logger.Log('Error writing file: ' + path + ' (sync)', logger.GetColor('redbg'))
    }
  })
}

function AppendToFile (data, file) {
  CreatePath(file)
  fs.appendFile(file, '\n' + data, function (err) {
    if (err) { logger.Log('Error writing log file: ' + file + ' (sync)', logger.GetColor('redbg')) }
  })
}

function Beep () {
  try {
    process.stdout.write('\x07')
  } catch (e) {
    console.log('error beepin')
  }
}

function WriteBackup () {
  try {
    WriteFileAsync(ReadFile(dataFile), 'public/backs/data_' + new Date().toString())
  } catch (e) {
    logger.Log('Error backing up data json file!', logger.GetColor('redbg'))
    console.log(e)
  }
}