{{!
  Copyright (c) HashiCorp, Inc.
  SPDX-License-Identifier: MPL-2.0
}}

<SearchBar
  class="consul-upstream-search-bar"
  ...attributes
  @filter={{@filter}}
>
    <:status as |search|>

{{#let

  (t (concat "components.consul.upstream.search-bar." search.status.key ".name")
      default=(array
        (concat "common.search." search.status.key)
        (concat "common.consul." search.status.key)
      )
  )

  (t (concat "components.consul.upstream.search-bar." search.status.value ".name")
      default=(array
        (concat "common.search." search.status.value)
        (concat "common.consul." search.status.value)
        (concat "common.brand." search.status.value)
      )
  )

as |key value|}}
      <search.RemoveFilter
        aria-label={{t "common.ui.remove" item=(concat key " " value)}}
      >
        <dl>
          <dt>{{key}}</dt>
          <dd>{{value}}</dd>
        </dl>
      </search.RemoveFilter>
{{/let}}

    </:status>
    <:search as |search|>
      <search.Search
        @onsearch={{action @onsearch}}
        @value={{@search}}
        @placeholder={{t "common.search.search"}}
      >
        <search.Select
          class="type-search-properties"
          @position="right"
          @onchange={{action @filter.searchproperty.change}}
          @multiple={{true}}
          @required={{true}}
        as |components|>
          <BlockSlot @name="selected">
            <span>
              {{t "common.search.searchproperty"}}
            </span>
          </BlockSlot>
          <BlockSlot @name="options">
    {{#let components.Optgroup components.Option as |Optgroup Option|}}
            {{#each @filter.searchproperty.default as |prop|}}
              <Option @value={{prop}} @selected={{includes prop @filter.searchproperty.value}}>
                {{t (concat "common.consul." (lowercase prop))}}
              </Option>
            {{/each}}
    {{/let}}
          </BlockSlot>
        </search.Select>
      </search.Search>
    </:search>
    <:filter as |search|>
      <search.Select
        @position="left"
        @onchange={{action @filter.instance.change}}
        @multiple={{true}}
      as |components|>
        <BlockSlot @name="selected">
          <span>
            {{t "components.consul.upstream.search-bar.instance.name"}}
          </span>
        </BlockSlot>
        <BlockSlot @name="options">
  {{#let components.Optgroup components.Option as |Optgroup Option|}}
      {{#each (array "registered" "not-registered") as |item|}}
            <Option @value={{item}} @selected={{includes item @filter.instance.value}}>
              {{t (concat "common.consul." item)}}
            </Option>
      {{/each}}
  {{/let}}
        </BlockSlot>
      </search.Select>
    </:filter>
    <:sort as |search|>
      <search.Select
        class="type-sort"
        data-test-sort-control
        @position="right"
        @onchange={{action @sort.change}}
        @multiple={{false}}
        @required={{true}}
      as |components|>
        <BlockSlot @name="selected">
          <span>
            {{#let (from-entries (array
                  (array "Name:asc" (t "common.sort.alpha.asc"))
                  (array "Name:desc" (t "common.sort.alpha.desc"))
                  (array "Status:asc" (t "common.sort.status.asc"))
                  (array "Status:desc" (t "common.sort.status.desc"))
                ))
              as |selectable|
            }}
              {{get selectable @sort.value}}
            {{/let}}
          </span>
        </BlockSlot>
        <BlockSlot @name="options">
  {{#let components.Optgroup components.Option as |Optgroup Option|}}
          <Optgroup @label={{t "common.consul.status"}}>
            <Option @value="Status:asc" @selected={{eq "Status:asc" @sort.value}}>{{t "common.sort.status.asc"}}</Option>
            <Option @value="Status:desc" @selected={{eq "Status:desc" @sort.value}}>{{t "common.sort.status.desc"}}</Option>
          </Optgroup>
          <Optgroup @label={{t "common.consul.service-name"}}>
            <Option @value="Name:asc" @selected={{eq "Name:asc" @sort.value}}>{{t "common.sort.alpha.asc"}}</Option>
            <Option @value="Name:desc" @selected={{eq "Name:desc" @sort.value}}>{{t "common.sort.alpha.desc"}}</Option>
          </Optgroup>
  {{/let}}
        </BlockSlot>
      </search.Select>
    </:sort>
</SearchBar>
