var fs = require('fs');
var path = require('path');
var crypto = require('crypto');
var d3 = require('d3-queue');

module.exports = function () {
    this.hashOfFiles = (paths, cb) => {
        paths = Array.isArray(paths) ? paths : [paths];
        var shasum = crypto.createHash('sha1');

        var q = d3.queue(1);

        var addFile = (path, cb) => {
            fs.readFile(path, (err, data) => {
                shasum.update(data);
                cb(err);
            });
        };

        paths.forEach(path => { q.defer(addFile, path); });

        q.awaitAll(err => {
            if (err) throw new Error('*** Error reading files:', err);
            cb(shasum.digest('hex'));
        });
    };

    this.hashProfile = (cb) => {
        this.hashOfFiles(path.resolve(this.PROFILES_PATH, this.profile + '.lua'), cb);
    };

    this.hashString = (str) => {
        return crypto.createHash('sha1').update(str).digest('hex');
    };

    return this;
};