module.exports = function(environment) {

var Dimension = require("../less/tree/dimension"),
Expression = require("../less/tree/expression"),
functionRegistry = require("./../less/functions/function-registry");

function imageSize(functionContext, filePathNode) {
    var filePath = filePathNode.value;
    var currentFileInfo = functionContext.currentFileInfo;
    var currentDirectory = currentFileInfo.relativeUrls ?
    currentFileInfo.currentDirectory : currentFileInfo.entryPath;

    var fragmentStart = filePath.indexOf('#');
    var fragment = '';
    if (fragmentStart !== -1) {
        fragment = filePath.slice(fragmentStart);
        filePath = filePath.slice(0, fragmentStart);
    }

    var fileManager = environment.getFileManager(filePath, currentDirectory, functionContext.context, environment, true);

    if (!fileManager) {
        throw {
            type: "File",
            message: "Can not set up FileManager for " + filePathNode
        };
    }

    var fileSync = fileManager.loadFileSync(filePath, currentDirectory, functionContext.context, environment);

    if (fileSync.error) {
        throw fileSync.error;
    }

    var sizeOf = require('image-size');
    return sizeOf(fileSync.filename);
}

var imageFunctions = {
    "image-size": function(filePathNode) {
        var size = imageSize(this, filePathNode);
        return new Expression([
            new Dimension(size.width, "px"),
            new Dimension(size.height, "px")
        ]);
    },
    "image-width": function(filePathNode) {
        var size = imageSize(this, filePathNode);
        return new Dimension(size.width, "px");
    },
    "image-height": function(filePathNode) {
        var size = imageSize(this, filePathNode);
        return new Dimension(size.height, "px");
    }
};

functionRegistry.addMultiple(imageFunctions);

};