/**
 * Library: isPromise
 * Makes sure that an Expression node is part of a promise.
 */
var STATIC_METHODS = [
  'all',
  'race',
  'reject',
  'resolve'
]

function isPromise (expression) {
  return ( // hello.then()
  expression.type === 'CallExpression' &&
  expression.callee.type === 'MemberExpression' &&
  expression.callee.property.name === 'then'
  ) || ( // hello.catch()
  expression.type === 'CallExpression' &&
  expression.callee.type === 'MemberExpression' &&
  expression.callee.property.name === 'catch'
  ) || ( // hello.finally()
  expression.type === 'CallExpression' &&
  expression.callee.type === 'MemberExpression' &&
  expression.callee.property.name === 'finally'
  ) || ( // somePromise.ANYTHING()
  expression.type === 'CallExpression' &&
  expression.callee.type === 'MemberExpression' &&
  isPromise(expression.callee.object)
  ) || ( // Promise.STATIC_METHOD()
  expression.type === 'CallExpression' &&
  expression.callee.type === 'MemberExpression' &&
  expression.callee.object.type === 'Identifier' &&
  expression.callee.object.name === 'Promise' &&
  STATIC_METHODS.indexOf(expression.callee.property.name) !== -1
  )
}

module.exports = isPromise
