module.exports = (() => {
    const
        chalk = require('chalk'),

        getTime = () => {
            const
                now = new Date(),
                tzo = -now.getTimezoneOffset(),
                dif = tzo >= 0 ? '+' : '-',

                pad = (num) => {
                    const norm = Math.floor(Math.abs(num));
                    return `${norm < 10 ? '0' : ''}${norm}`;
                };
            return [
                now.getFullYear(),
                '-',
                pad(now.getMonth() + 1),
                '-',
                pad(now.getDate()),
                'T',
                pad(now.getHours()),
                ':',
                pad(now.getMinutes()),
                ':',
                pad(now.getSeconds()),
                dif,
                pad(tzo / 60),
                ':',
                pad(tzo % 60)
            ].join('');
        };

    return {
        convertCamelToUpperSnakeCase:
            str => str.replace(/[A-Z]/g, letter => `_${letter}`).toUpperCase(),

        getTime,

        log: (msg) => console.log(`${chalk.grey(`${getTime()}:`)} ${msg}`),

        readJsonIfExists: (filePath) => {
            const
                fs = require('fs'),

                json5 = require('json5');

            try {
                return json5.parse(fs.readFileSync(filePath, {encoding: 'utf8'}));
            } catch (err) {
                if (err.code === 'ENOENT') return {};
                throw err;
            }
        },
        
    };
})();
