'use strict';

/**
 * Dependencies
 */
const fs = require('fs');
const runProcessors = require('./run-processors');

/**
 * Helper to process in a single file (async)
 */
module.exports = function processAsync(file, processor, config) {

  //Extract relevant config
  const {encoding, dry} = config;

  //Wrap in promise
  return new Promise((resolve, reject) => {
    fs.readFile(file, encoding, (error, contents) => {
      //istanbul ignore if
      if (error) {
        return reject(error);
      }

      //Make replacements
      const [result, newContents] = runProcessors(
        contents, processor, file,
      );

      //Not changed or dry run?
      if (!result.hasChanged || dry) {
        return resolve(result);
      }

      //Write to file
      fs.writeFile(file, newContents, encoding, error => {
        //istanbul ignore if
        if (error) {
          return reject(error);
        }
        resolve(result);
      });
    });
  });
};