const fs = require('fs')
const mime = require('mime')

mime.define({
  'text/plain': [
    'license',
    'readme',
    'changes',
    'authors',
    'makefile',
    'ts',
    'flow'
  ]
})

const TextFiles = /\/?(\.[a-z]*rc|\.git[a-z]*|\.[a-z]*ignore)$/i

function getContentType(file) {
  return TextFiles.test(file) ? 'text/plain' : mime.lookup(file)
}

function getStats(file) {
  return new Promise((resolve, reject) => {
    fs.lstat(file, (error, stats) => {
      if (error) {
        reject(error)
      } else {
        resolve(stats)
      }
    })
  })
}

function getFileType(stats) {
  if (stats.isFile()) return 'file'
  if (stats.isDirectory()) return 'directory'
  if (stats.isBlockDevice()) return 'blockDevice'
  if (stats.isCharacterDevice()) return 'characterDevice'
  if (stats.isSymbolicLink()) return 'symlink'
  if (stats.isSocket()) return 'socket'
  if (stats.isFIFO()) return 'fifo'
  return 'unknown'
}

module.exports = {
  getContentType,
  getStats,
  getFileType
}