'use strict';

var format = require('util').format;

var ERR_CODE = 'ARGError';

/*

* argumentError(argument, message) -> TypeError
* - argument (Object): action with broken argument
* - message (String): error message
*
* Error format helper. An error from creating or using an argument
* (optional or positional). The string value of this exception
* is the message, augmented with information
* about the argument that caused it.
*
* #####Example
*
*      var argumentErrorHelper = require('./argument/error');
*      if (conflictOptionals.length > 0) {
*        throw argumentErrorHelper(
*          action,
*          format('Conflicting option string(s): %s', conflictOptionals.join(', '))
*        );
*      }
*
**/

module.exports = function (argument, message) {

var argumentName = null;
var errMessage;
var err;

if (argument.getName) {
  argumentName = argument.getName();
} else {
  argumentName = '' + argument;
}

if (!argumentName) {
  errMessage = message;
} else {
  errMessage = format('argument "%s": %s', argumentName, message);
}

err = new TypeError(errMessage);
err.code = ERR_CODE;
return err;

};