'use strict';

const astUtil = require('./ast');

/**
 * Checks if the node is a React.createContext call
 * @param {ASTNode} node - The AST node being checked.
 * @returns {boolean} - True if node is a React.createContext call, false if not.
 */
module.exports = function isCreateContext(node) {
  if (
    node.init
    && node.init.callee
  ) {
    if (
      astUtil.isCallExpression(node.init)
      && node.init.callee.name === 'createContext'
    ) {
      return true;
    }

    if (
      node.init.callee.type === 'MemberExpression'
      && node.init.callee.property
      && node.init.callee.property.name === 'createContext'
    ) {
      return true;
    }
  }

  if (
    node.expression
    && node.expression.type === 'AssignmentExpression'
    && node.expression.operator === '='
    && astUtil.isCallExpression(node.expression.right)
    && node.expression.right.callee
  ) {
    const right = node.expression.right;

    if (right.callee.name === 'createContext') {
      return true;
    }

    if (
      right.callee.type === 'MemberExpression'
      && right.callee.property
      && right.callee.property.name === 'createContext'
    ) {
      return true;
    }
  }

  return false;
};