/*
 * SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */

'use strict';

const loggerFunctions = ['error', 'log', 'warn', 'debug', 'verbose'];

module.exports = {
  'correct-logger-context': {
    meta: {
      fixable: 'code',
      type: 'problem',
      docs: {
        recommended: true
      },
      schema: [],
    },
    create: function (context) {
      return {
        CallExpression: function (node) {
          if (
            node.callee.type === 'MemberExpression' &&
            node.callee.object.type === 'MemberExpression' &&
            node.callee.object.property.name === 'logger' &&
            loggerFunctions.includes(node.callee.property.name) &&
            !!node.arguments &&
            node.arguments.length === 2
          ) {
            const usedContext = node.arguments[1].value;
            let correctContext = 'undefined';
            const ancestors = context.getAncestors();
            for (let index = ancestors.length - 1; index >= 0; index--) {
              if (ancestors[index].type === 'MethodDefinition') {
                correctContext = ancestors[index].key.name;
                break;
              }
            }
            if (usedContext !== correctContext) {
              context.report({
                node: node,
                message: `Used wrong context in log statement`,
                fix: function (fixer) {
                  return fixer.replaceText(
                    node.arguments[1],
                    `'${correctContext}'`,
                  );
                },
              });
            }
          }
        },
      };
    },
  },
};
