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

<TabularCollection
  class='consul-intention-list-table'
  ...attributes
  @items={{@items}}
  @rowHeight={{59}}
  as |item index|
>
  <BlockSlot @name='header'>
    <th class='source'>Source</th>
    <th class='intent'>Intention Type</th>
    <th class='destination'>Destination</th>
    <th class='permissions'>
      Permissions
      <span>
        <Tooltip>Permissions intercept an Intention's traffic using Layer 7 criteria, such as path
          prefixes and http headers.</Tooltip>
      </span>
    </th>
    <th class='meta'>Status</th>
  </BlockSlot>
  <BlockSlot @name='row'>
    <td class='source' data-test-intention={{item.ID}}>
      <a
        href={{href-to (or @routeName 'dc.intentions.edit') item.ID}}
        data-test-intention-source={{item.SourceName}}
      >
        {{#if (eq item.SourceName '*')}}
          All Services (*)
        {{else}}
          {{item.SourceName}}
        {{/if}}
        {{! TODO: slugify }}
        <em class='consul-intention-list-table__meta-info'>
          <Consul::Bucket::List
            @item={{hash
              Namespace=item.SourceNS
              Partition=item.SourcePartition
              PeerName=item.SourcePeer
            }}
            @nspace='-'
            @partition='-'
          />
        </em>
      </a>
    </td>
    <td class='intent intent-{{slugify item.Action}}' data-test-intention-action={{item.Action}}>
      <strong>{{capitalize (or item.Action 'App aware')}}</strong>
    </td>
    <td class='destination' data-test-intention-destination={{item.DestinationName}}>
      <span>
        {{#if (eq item.DestinationName '*')}}
          All Services (*)
        {{else}}
          {{item.DestinationName}}
        {{/if}}
        {{#if (or (can 'use nspaces') (can 'use partitions'))}}
          {{! TODO: slugify }}
          <em>
            <span class={{concat 'partition-' (or item.DestinationPartition 'default')}}>{{or
                item.DestinationPartition
                'default'
              }}</span>
            /
            <span class={{concat 'nspace-' (or item.DestinationNS 'default')}}>{{or
                item.DestinationNS
                'default'
              }}</span>
          </em>
        {{/if}}
      </span>
    </td>
    <td class='permissions'>
      {{#if (gt item.Permissions.length 0)}}
        <span>{{pluralize item.Permissions.length 'Permission'}}</span>
      {{/if}}
    </td>
    <td class='meta'>
      {{#if item.IsManagedByCRD}}
        <Consul::ExternalSource @item={{item}} @label='Managed by CRD' />
      {{/if}}
    </td>
  </BlockSlot>
  <BlockSlot @name='actions' as |index change checked|>
    <PopoverMenu
      @expanded={{if (eq checked index) true false}}
      @onchange={{action change index}}
      @keyboardAccess={{true}}
      as |components api|
    >
      <BlockSlot @name='trigger'>
        More
      </BlockSlot>
      <BlockSlot @name='menu' as |confirm keypressClick change|>
        {{#if (can 'write intention' item=item)}}
          <components.MenuItem href={{href-to (or @routeName 'dc.intentions.edit') item.ID}}>
            <BlockSlot @name="label">
              Edit
            </BlockSlot>
          </components.MenuItem>
          <components.MenuItem @onclick={{action @delete item}} class="dangerous" data-test-delete>
            <BlockSlot @name="label">
              Delete
            </BlockSlot>
            <BlockSlot @name="confirm-header">
              Confirm Delete
            </BlockSlot>
            <BlockSlot @name="confirm-body">
              Are you sure you want to delete this intention?
            </BlockSlot>
            <BlockSlot @name="confirm-footer" as |Params|>
              <Params.button @text='Delete' {{on 'click' Params.confirmAction}} />
            </BlockSlot>
          </components.MenuItem>

        {{else if (can 'view CRD intention' item=item)}}
          <li role='none'>
            <div role='menu'>
              <InformedAction>
                <:header>
                  <span class='flex flex-nowrap items-center'>
                    <FlightIcon @name='kubernetes-color' class='mr-1.5' />
                    Managed by CRD
                  </span>
                </:header>
                <:body>
                  <p>
                    This intention is being managed through an Intention Custom Resource in your
                    Kubernetes cluster. It is view only in the UI.
                  </p>
                </:body>
                <:actions as |Actions|>
                  <Actions.Action>
                    <Action
                      tabindex='-1'
                      class='action'
                      @href={{href-to (or @routeName 'dc.intentions.edit') item.ID}}
                    >
                      View
                    </Action>
                  </Actions.Action>
                  <Actions.Action>
                    <Action @onclick={{action change}}>
                      Cancel
                    </Action>
                  </Actions.Action>
                </:actions>
              </InformedAction>
            </div>
          </li>
        {{else}}
          <li role='none'>
            <a
              role='menuitem'
              tabindex='-1'
              href={{href-to (or @routeName 'dc.intentions.edit') item.ID}}
            >
              View
            </a>
          </li>
        {{/if}}
      </BlockSlot>
    </PopoverMenu>
  </BlockSlot>
</TabularCollection>
