"use strict";
/*
 EasyImage

 EasyImage is a promise-based image processing module
 for Node.js, it is built on top of ImageMagick, so
 make sure ImageMagick is installed on your system.

 Copyright (c) 2015 Hage Yaapa <http://www.hacksparrow.com>
 Maintained by Kevin Gravier <http://github.com/mrkmg>

 MIT License
 */
exports.__esModule = true;
var Bluebird = require("bluebird");
var fs_1 = require("fs");
var mkdirp = require("mkdirp");
var os_1 = require("os");
var path_1 = require("path");
var BadDestinationError_1 = require("./errors/BadDestinationError");
var MissingExtensionError_1 = require("./errors/MissingExtensionError");
var MissingOptionsError_1 = require("./errors/MissingOptionsError");
var nanoid = require("nanoid");
Promise = Promise || Bluebird;
function ensureDestinationDirectoryExists(options) {
    if (!options.dst) {
        return Promise.reject(new MissingOptionsError_1.MissingOptionsError(["dst"]));
    }
    return new Promise(function (resolve, reject) {
        var targetDirectory = path_1.dirname(options.dst);
        fs_1.exists(targetDirectory, function (doesExist) {
            if (doesExist) {
                resolve();
            }
            else {
                mkdirp(targetDirectory, function (err, wasMade) {
                    if (err) {
                        return reject(err);
                    }
                    if (wasMade) {
                        resolve();
                    }
                    else {
                        reject(new BadDestinationError_1.BadDestinationError());
                    }
                });
            }
        });
    });
}
exports.ensureDestinationDirectoryExists = ensureDestinationDirectoryExists;
function applyDefaultsToBaseOptions(options) {
    if (!options.hasOwnProperty("autoOrient")) {
        options.autoOrient = true;
    }
    if (!options.hasOwnProperty("dst")) {
        options.dst = makeTemporaryFile(options.src);
    }
}
exports.applyDefaultsToBaseOptions = applyDefaultsToBaseOptions;
function applyBaseOptionsToArgs(options, args) {
    if (options.flatten && options.background) {
        args.push("-flatten", "-background", options.background);
    }
    else if (options.background) {
        args.push("-background", options.background, "-flatten");
    }
    if (options.autoOrient) {
        args.push("-auto-orient");
    }
    if (options.coalesce) {
        args.push("-coalesce");
    }
    if (options.quality) {
        args.push("-quality", options.quality.toString());
    }
    if (path_1.extname(options.src) === ".pdf") {
        args.push("-append");
    }
}
exports.applyBaseOptionsToArgs = applyBaseOptionsToArgs;
function checkForMissingOptions(options, requiredArgs) {
    var missingArgs = [];
    for (var _i = 0, requiredArgs_1 = requiredArgs; _i < requiredArgs_1.length; _i++) {
        var requiredArg = requiredArgs_1[_i];
        if (!options.hasOwnProperty(requiredArg)) {
            missingArgs.push(requiredArg);
        }
    }
    if (missingArgs.length) {
        throw new MissingOptionsError_1.MissingOptionsError(missingArgs);
    }
}
exports.checkForMissingOptions = checkForMissingOptions;
function makeTemporaryFile(sourceFile) {
    var extension = path_1.extname(sourceFile);
    if (!extension) {
        throw new MissingExtensionError_1.MissingExtensionError(sourceFile);
    }
    var fileName = nanoid(8);
    return os_1.tmpdir() + "/EasyImage-" + fileName + extension;
}