const { create: createPlaylist } = require('./playlist')
const store = require('./store')
const path = require('path')
const glob = require('glob')
const fs = require('fs-extra')
const _ = require('lodash')

const file = {}

file.list = function (pattern) {
  return new Promise(resolve => {
    glob(pattern, function (err, files) {
      resolve(files)
    })
  })
}

file.getFilename = function (filepath) {
  return path.parse(filepath).name
}

file.createDir = async function (dir) {
  if (await file.exists(dir)) return

  return fs.mkdir(dir, { recursive: true }).catch(console.error)
}

file.exists = function (filepath) {
  return fs.exists(path.resolve(filepath))
}

file.read = function (filepath) {
  return fs.readFile(path.resolve(filepath), { encoding: 'utf8' }).catch(console.error)
}

file.append = function (filepath, data) {
  return fs.appendFile(path.resolve(filepath), data).catch(console.error)
}

file.create = function (filepath, data = '') {
  filepath = path.resolve(filepath)
  const dir = path.dirname(filepath)

  return file
    .createDir(dir)
    .then(() => fs.writeFile(filepath, data, { encoding: 'utf8', flag: 'w' }))
    .catch(console.error)
}

file.write = function (filepath, data = '') {
  return fs.writeFile(path.resolve(filepath), data).catch(console.error)
}

file.clear = function (filepath) {
  return file.write(filepath, '')
}

file.resolve = function (filepath) {
  return path.resolve(filepath)
}

file.dirname = function (filepath) {
  return path.dirname(filepath)
}

file.basename = function (filepath) {
  return path.basename(filepath)
}

// file.saveAsM3U = async function (filepath, items, options = {}) {
//   const playlist = createPlaylist(filepath)

//   const header = {}
//   if (options.public) {
//     let guides = items.map(item => item.guides)
//     guides = _.uniq(_.flatten(guides)).sort().join(',')

//     header['x-tvg-url'] = guides
//   }
//   playlist.setHeader(header)

//   for (const item of items) {
//     const stream = store.create(item)

//     let attrs
//     if (options.public) {
//       attrs = {
//         'tvg-id': stream.get('tvg_id'),
//         'tvg-country': stream.get('tvg_country'),
//         'tvg-language': stream.get('tvg_language'),
//         'tvg-logo': stream.get('tvg_logo'),
//         'user-agent': stream.get('http.user-agent') || undefined,
//         'group-title': stream.get('group_title')
//       }
//     } else {
//       attrs = {
//         'tvg-id': stream.get('tvg_id'),
//         'user-agent': stream.get('http.user-agent') || undefined
//       }
//     }

//     playlist.add(stream.get('url'), stream.get('display_name'), attrs, {
//       'http-referrer': stream.get('http.referrer') || undefined,
//       'http-user-agent': stream.get('http.user-agent') || undefined
//     })
//   }

//   return file.write(filepath, playlist.toString())
// }

module.exports = file