{{!
  Copyright (c) HashiCorp, Inc.
  SPDX-License-Identifier: BUSL-1.1
~}}

{{! template-lint-configure simple-unless "warn"  }}
<div class="field" data-test-form-field-from-model>
  {{#unless
    (or
      (includes
        @attr.options.editType (array "boolean" "searchSelect" "mountAccessor" "kv" "file" "ttl" "stringArray" "json")
      )
      (eq @attr.type "boolean")
    )
  }}
    {{#unless (eq @attr.type "object")}}
      <label for={{@attr.name}} class="is-label">
        {{capitalize (or @attr.options.label (humanize (dasherize @attr.name)))}}
        {{#if @attr.options.helpText}}
          <InfoTooltip>{{@attr.options.helpText}}</InfoTooltip>
        {{/if}}
      </label>
    {{/unless}}
  {{/unless}}
  {{#if @attr.options.possibleValues}}
    <div class="control is-expanded">
      <div class="select is-fullwidth">
        <select
          name={{@attr.name}}
          id={{@attr.name}}
          onchange={{action (mut (get @model @attr.name)) value="target.value"}}
          data-test-input={{@attr.name}}
        >
          {{#each @attr.options.possibleValues as |val|}}
            <option selected={{eq (get @model @attr.name) val}} value={{val}}>
              {{val}}
            </option>
          {{/each}}
        </select>
      </div>
    </div>
  {{else if (eq @attr.options.editType "ttl")}}
    <TtlPicker
      @initialValue={{or (get @model @attr.name) @attr.options.defaultValue}}
      @initialEnabled={{or (get @model @attr.name) false}}
      @label={{or @attr.options.label (humanize (dasherize @attr.name))}}
      @helperTextDisabled="If this is not set, the engine default will be used."
      @helperTextEnabled="Disable lease after"
      @onChange={{@updateTtl}}
    />
  {{else if (or (eq @attr.type "number") (eq @attr.type "string"))}}
    <div class="control">
      <Input
        id={{@attr.name}}
        @value={{get @model (or @attr.options.fieldValue @attr.name)}}
        class="input"
        data-test-input={{@attr.name}}
      />
    </div>
  {{else if (eq @attr.type "boolean")}}
    <div class="b-checkbox">
      <input
        type="checkbox"
        id={{@attr.name}}
        class="styled"
        checked={{get this.model @attr.name}}
        onchange={{action (mut (get this.model @attr.name)) value="target.checked"}}
        data-test-input={{@attr.name}}
      />

      <label for={{@attr.name}} class="is-label">
        {{capitalize (or @attr.options.label (humanize (dasherize @attr.name)))}}
        {{#if @attr.options.helpText}}
          <InfoTooltip>{{@attr.options.helpText}}</InfoTooltip>
        {{/if}}
      </label>
    </div>
  {{else if (eq @attr.type "object")}}
    <JsonEditor
      @title={{capitalize (or @attr.options.label (humanize (dasherize @attr.name)))}}
      @helpText={{@attr.options.helpText}}
      @value={{if (get @model @attr.name) (stringify (get @model @attr.name)) @emptyData}}
      @valueUpdated={{@codemirrorUpdated}}
    />
  {{/if}}
</div>