'use strict'

const stylelint = require('stylelint')
const path = require('path')

const CONFIG = require('../config')

module.exports = function () {
  return stylelint
    .lint({
      files: path.join(CONFIG.repositoryRootPath, 'static/**/*.less'),
      configBasedir: __dirname,
      configFile: path.resolve(__dirname, '..', '..', 'stylelint.config.js')
    })
    .then(({results}) => {
      const errors = []

      for (const result of results) {
        for (const deprecation of result.deprecations) {
          console.log('stylelint encountered deprecation:', deprecation.text)
          if (deprecation.reference != null) {
            console.log('more information at', deprecation.reference)
          }
        }

        for (const invalidOptionWarning of result.invalidOptionWarnings) {
          console.warn(
            'stylelint encountered invalid option:',
            invalidOptionWarning.text
          )
        }

        if (result.errored) {
          for (const warning of result.warnings) {
            if (warning.severity === 'error') {
              errors.push({
                path: result.source,
                lineNumber: warning.line,
                message: warning.text,
                rule: warning.rule
              })
            } else {
              console.warn(
                'stylelint encountered non-critical warning in file',
                result.source,
                'at line',
                warning.line,
                'for rule',
                warning.rule + ':',
                warning.text
              )
            }
          }
        }
      }

      return errors
    })
    .catch(err => {
      console.error('There was a problem linting LESS:')
      throw err
    })
}
