_ = require('lodash')

# @nodoc
isQuiet = false

# Change log quietness
#
# @param {Boolean} quiet quietness
#
# @note If quiet is true, only resin.log.info will be quieted
#
# @example Set quietness
#		resin.log.setQuiet(true)
#
exports.setQuiet = (quiet) ->
	isQuiet = !!quiet

# Check quietness
#
# @return {Boolean} is quiet
#
# @example Check quietness
#		resin.log.isQuiet()
#
exports.isQuiet = ->
	return isQuiet

# Log an error
#
# @param {...String} message message
#
# @example Log an error
#		resin.log.error('Something went wrong!')
#
exports.error = (args...) ->
	console.error.apply(null, args)

# Log a warning
#
# @param {...String} message message
#
# @example Log a warning
#		resin.log.warning('Something might happened!')
#
exports.warning = (args...) ->
	console.warn.apply(null, args)

# Log info
#
# @param {...String} message message
#
# @example Log info
#		resin.log.info('Look!')
#
exports.info = (args...) ->
	return if exports.isQuiet()
	console.info.apply(null, args)

# Log out
#
# @param {...String} message message
#
# @note This will not be quieted even if setQuiet is set to true
#
# @example Log out
#		resin.log.out('Hello World!')
#
exports.out = (args...) ->
	console.log.apply(null, args)

# Log an array
#
# It will iterate trough the array, calling logFunction for every item
#
# @param {Array} array array
# @param {Function} logFunction log function (e.g: resin.log.info)
#
# @throw {Error} Will throw if logFunction is not a function
#
exports.array = (array, logFunction) ->
	return if not array?

	if not _.isFunction(logFunction)
		throw new Error('Invalid log function')

	if not _.isArray(array)
		return logFunction(array)

	for item in array
		logFunction(item)