/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */

import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';

export default class Element extends Component {
  @tracked el;

  @tracked touched = false;

  get type() {
    if (typeof this.el !== 'undefined') {
      return this.el.dataset.type || this.el.getAttribute('type') || this.el.getAttribute('role');
    }
    return this.args.type;
  }
  get name() {
    if (typeof this.args.group !== 'undefined') {
      return `${this.args.group.name}[${this.args.name}]`;
    } else {
      return this.args.name;
    }
  }
  get prop() {
    return `${this.args.name.toLowerCase().split('.').join('-')}`;
  }
  get state() {
    const error = this.touched && this.args.error;
    return {
      matches: (name) => name === 'error' && error,
    };
  }

  @action
  connect($el) {
    this.el = $el;
  }
}
