const loadImage = require('blueimp-load-image');

const DEFAULT_JPEG_QUALITY = 0.85;

// File | Blob | URLString -> LoadImageOptions -> Promise<DataURLString>
//
// Documentation for `options` (`LoadImageOptions`):
// https://github.com/blueimp/JavaScript-Load-Image/tree/v2.18.0#options
exports.autoOrientImage = (fileOrBlobOrURL, options = {}) => {
  const optionsWithDefaults = Object.assign(
    {
      type: 'image/jpeg',
      quality: DEFAULT_JPEG_QUALITY,
    },
    options,
    {
      canvas: true,
      orientation: true,
    }
  );

  return new Promise((resolve, reject) => {
    loadImage(fileOrBlobOrURL, (canvasOrError) => {
      if (canvasOrError.type === 'error') {
        const error = new Error('autoOrientImage: Failed to process image');
        error.cause = canvasOrError;
        reject(error);
        return;
      }

      const canvas = canvasOrError;
      const dataURL = canvas.toDataURL(
        optionsWithDefaults.type,
        optionsWithDefaults.quality
      );

      resolve(dataURL);
    }, optionsWithDefaults);
  });
};