import path from 'path'
import fs from 'fs-extra'
import ignore from 'ignore'

export default class Ignore {
  constructor(options) {
    this.rootDir = options.rootDir
    this.addIgnoresRules()
  }

  static get IGNORE_FILENAME() {
    return '.nuxtignore'
  }

  findIgnoreFile() {
    if (!this.ignoreFile) {
      const ignoreFile = path.resolve(this.rootDir, Ignore.IGNORE_FILENAME)
      if (fs.existsSync(ignoreFile) && fs.statSync(ignoreFile).isFile()) {
        this.ignoreFile = ignoreFile
        this.ignore = ignore()
      }
    }
    return this.ignoreFile
  }

  readIgnoreFile() {
    if (this.findIgnoreFile()) {
      return fs.readFileSync(this.ignoreFile, 'utf8')
    }
  }

  addIgnoresRules() {
    const content = this.readIgnoreFile()
    if (content) {
      this.ignore.add(content)
    }
  }

  filter(paths) {
    if (this.ignore) {
      return this.ignore.filter([].concat(paths || []))
    }
    return paths
  }

  reload() {
    delete this.ignore
    delete this.ignoreFile
    this.addIgnoresRules()
  }
}
