'use strict';

// https://github.com/sindresorhus/read-chunk

const fs = require('fs');
const pify = require('./pify');
const withOpenFile = require('./withOpenFile');

const fsReadP = pify(fs.read, { multiArgs: true });

const readChunk = (filePath, startPosition, length) => {
  const buffer = Buffer.alloc(length);

  return withOpenFile(filePath, 'r', fileDescriptor =>
    fsReadP(fileDescriptor, buffer, 0, length, startPosition)
  )
    .then(([bytesRead, buffer]) => {
      if (bytesRead < length) {
        buffer = buffer.slice(0, bytesRead);
      }

      return buffer;
    });
};

module.exports = readChunk;
// TODO: Remove this for the next major release
module.exports.default = readChunk;

module.exports.sync = (filePath, startPosition, length) => {
  let buffer = Buffer.alloc(length);

  const bytesRead = withOpenFile.sync(filePath, 'r', fileDescriptor =>
    fs.readSync(fileDescriptor, buffer, 0, length, startPosition)
  );

  if (bytesRead < length) {
    buffer = buffer.slice(0, bytesRead);
  }

  return buffer;
};
