/**
 * @author Perry Song
 * @copyright 2023 Perry Song. All rights reserved.
 * See LICENSE file in root directory for full license.
 */
'use strict'

const utils = require('../utils')

module.exports = {
  meta: {
    type: 'suggestion',
    docs: {
      description: 'disallow `v-if` directives on root element',
      categories: undefined,
      url: 'https://eslint.vuejs.org/rules/no-root-v-if.html'
    },
    fixable: null,
    schema: [],
    messages: {
      noRootVIf: '`v-if` should not be used on root element without `v-else`.'
    }
  },
  /** @param {RuleContext} context */
  create(context) {
    return {
      /** @param {Program} program */
      Program(program) {
        const element = program.templateBody
        if (element == null) {
          return
        }

        const rootElements = element.children.filter(utils.isVElement)
        if (
          rootElements.length === 1 &&
          utils.hasDirective(rootElements[0], 'if')
        ) {
          context.report({
            node: element,
            loc: element.loc,
            messageId: 'noRootVIf'
          })
        }
      }
    }
  }
}