var baseToNumber = require('./_baseToNumber'),

baseToString = require('./_baseToString');

/**

* Creates a function that performs a mathematical operation on two values.
*
* @private
* @param {Function} operator The function to perform the operation.
* @param {number} [defaultValue] The value used for `undefined` arguments.
* @returns {Function} Returns the new mathematical operation function.
*/

function createMathOperation(operator, defaultValue) {

return function(value, other) {
  var result;
  if (value === undefined && other === undefined) {
    return defaultValue;
  }
  if (value !== undefined) {
    result = value;
  }
  if (other !== undefined) {
    if (result === undefined) {
      return other;
    }
    if (typeof value == 'string' || typeof other == 'string') {
      value = baseToString(value);
      other = baseToString(other);
    } else {
      value = baseToNumber(value);
      other = baseToNumber(other);
    }
    result = operator(value, other);
  }
  return result;
};

}

module.exports = createMathOperation;