/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: BUSL-1.1
 */

import { schedule } from '@ember/runloop';
import { on } from '@ember/object/evented';
import Mixin from '@ember/object/mixin';

export default Mixin.create({
  // selector passed to `this.$()` to find the element to focus
  // defaults to `'input'`
  focusOnInsertSelector: null,
  shouldFocus: true,

  // uses Ember.on so that we don't have to worry about calling _super if
  // didInsertElement is overridden
  focusOnInsert: on('didInsertElement', function () {
    schedule('afterRender', this, 'focusOnInsertFocus');
  }),

  focusOnInsertFocus() {
    if (this.shouldFocus === false) {
      return;
    }
    this.forceFocus();
  },

  forceFocus() {
    var $targ = this.element.querySelectorAll(this.focusOnInsertSelector || 'input[type="text"]')[0];
    if ($targ && $targ !== document.activeElement) {
      $targ.focus();
    }
  },
});
