@use 'sass:map';
@use '../abstracts/functions';
@use '../abstracts/mixins/breakpoints' as *;
@use '../abstracts/mixins/typography';
@use '../abstracts/variables';
@use '../abstracts/' as *;

$-box-separator: map.get(variables.$spacing, 'size-8');
$-input-spacing: map.get(variables.$spacing, 'size-4');

pkt-combobox {
  display: block;
}

.pkt-combobox-component {
  display: block;
  max-width: 31rem;
  width: 100%;

  &--fullwidth {
    max-width: 100%;
  }
}

.pkt-combobox__wrapper {
  position: relative;
  width: 100%;

  .pkt-combobox {
    position: relative;
    display: flex;
    flex-direction: column;
    width: 100%;

    // Legacy arrow button styles (kept for backward compat with older markup)
    &__arrow.pkt-btn {
      position: absolute;
      right: 0.25rem;
      height: 100%;
      min-width: 1.125rem;
      min-height: 1.125rem;
      padding: 0.5rem;
      svg {
        width: 1.5rem;
        height: 1.5rem;
      }
      &:hover:not([data-disabled]) {
        background-color: inherit;
        border-color: transparent;
      }
    }

    &__value {
      padding-inline-start: 0.5rem;
    }

    &__input {
      display: flex;
      align-items: center;
      position: relative;
      margin: 0;
      padding: 0.5rem 2rem 0.5rem 0.5rem;
      background-color: var(--pkt-color-input-background-normal);
      border: 2px solid var(--pkt-color-input-border-normal);
      color: var(--pkt-color-input-text-normal);
      min-height: 3rem;
      gap: 0.375rem;
      flex-wrap: wrap;
      @include typography.get-text('pkt-txt-18-light');
      line-height: 1.25;

      &-div {
        display: contents;
      }

      &--fullwidth {
        width: 100%;
      }

      &--small {
        min-height: 2.625rem;
        padding: 0.375rem 2.5rem 0.375rem 0.375rem;
        @include typography.get-text('pkt-txt-16-light');

        .pkt-combobox__arrow-icon svg {
          width: 1.25rem;
          height: 1.25rem;
        }
      }

      &--xsmall {
        min-height: 2.25rem;
        padding: 0.25rem 2.25rem 0.25rem 0.25rem;
        @include typography.get-text('pkt-txt-14-light');

        .pkt-combobox__arrow-icon {
          padding: 0.25rem 0.5rem;
        }

        .pkt-combobox__arrow-icon svg {
          width: 1.125rem;
          height: 1.125rem;
        }
      }

      &:hover:not(&--disabled):not(&--error) {
        border-color: var(--pkt-color-input-border-hover);

        > .pkt-combobox__value {
          color: var(--pkt-color-input-text-hover);
        }

        .pkt-combobox__arrow-icon {
          --fg-color: var(--pkt-color-input-text-hover);
          &:not(.pkt-combobox__arrow-icon--open) svg {
            transform: translateY(0.25rem);
          }
        }
      }

      &--error {
        &,
        &:hover,
        &:focus,
        &:focus-within {
          border-color: var(--pkt-color-brand-red-1000);
        }
      }

      &:focus,
      &:focus-within,
      &:focus-visible,
      &--open {
        border-color: var(--pkt-color-input-border-active);
        outline: 2px solid var(--pkt-color-input-border-active);
      }

      &--disabled {
        &,
        &:hover,
        &:focus,
        &:focus-within {
          background-color: var(--pkt-color-input-background-disabled);
          border-color: var(--pkt-color-border-states-disabled);
          color: var(--pkt-color-text-action-disabled);
          cursor: inherit;
        }
      }

      input {
        border: none;
        font-size: inherit;
        font-family: inherit;
        font-weight: inherit;
        color: inherit;
        background: transparent;
        letter-spacing: inherit;
        line-height: 1.4rem;
        padding: 0 0 0 0.5rem;
        margin: 0;
        flex: 1;
        min-width: 3rem;
        &::placeholder {
          color: var(--pkt-color-text-placeholder);
          opacity: 1;
        }
        &:focus,
        &:active {
          outline: none;
        }
      }
      .pkt-tag {
        margin: 0;
      }
    }
    &__tag-list {
      display: contents;
      list-style: none;
      margin: 0;
      padding: 0;
      li {
        display: contents;
      }
    }
    &__arrow-icon {
      position: absolute;
      right: 0.25rem;
      min-width: 1.125rem;
      min-height: 1.125rem;
      padding: 0.5rem;
      --fg-color: currentColor;
      transform: rotate(0deg);
      transition: transform 0.3s ease;
      pointer-events: none;
      svg {
        width: 1.5rem;
        height: 1.5rem;
        transition: transform 0.1s ease-in-out;
      }
      &--open {
        transform: rotate(180deg);
        transition: transform 0.3s ease;
      }
    }
    &__tags-outside {
      display: flex;
      flex-wrap: wrap;
      gap: 0.375rem;
      .pkt-tag {
        margin: 0;
      }
      .pkt-combobox__tag-list {
        display: flex;
        flex-wrap: wrap;
        gap: 0.375rem;
        list-style: none;
        margin: 0;
        padding: 0;
        li {
          display: contents;
        }
      }
    }

    &__placeholder {
      color: var(--pkt-color-text-placeholder);
      opacity: 1;
      padding-inline-start: 0.5rem;
    }
  }

  .pkt-listbox__open {
    margin-block-start: $-box-separator;
  }
  &.pkt-inputwrapper:not([data-navtype='pointer']) .pkt-combobox__input:focus-within {
    outline: 4px solid var(--pkt-color-border-states-focus);
  }

  // Dropdown scale follows input wrapper size (small / xsmall combobox fields)
  &.pkt-inputwrapper--small,
  &.pkt-inputwrapper--xsmall {
    .pkt-listbox {
      .pkt-listbox__option:not(.pkt-listbox__search) {
        padding: map.get(variables.$spacing, 'size-8') map.get(variables.$spacing, 'size-16');
        @include typography.get-text('pkt-txt-16-light');
      }

      .pkt-listbox__empty,
      .pkt-listbox__banner {
        padding: map.get(variables.$spacing, 'size-8') map.get(variables.$spacing, 'size-16');
        @include typography.get-text('pkt-txt-16-light');
      }

      .pkt-listbox__search input {
        padding: map.get(variables.$spacing, 'size-8') map.get(variables.$spacing, 'size-12');
        @include typography.get-text('pkt-txt-16-light');
      }
    }
  }

  &.pkt-inputwrapper--xsmall {
    .pkt-listbox {
      .pkt-listbox__option:not(.pkt-listbox__search) {
        padding: map.get(variables.$spacing, 'size-6') map.get(variables.$spacing, 'size-12');
        @include typography.get-text('pkt-txt-14-light');
      }

      .pkt-listbox__empty,
      .pkt-listbox__banner {
        padding: map.get(variables.$spacing, 'size-6') map.get(variables.$spacing, 'size-12');
        @include typography.get-text('pkt-txt-14-light');
      }

      .pkt-listbox__banner-icon,
      .pkt-listbox__search-icon .pkt-icon {
        width: 1.125rem;
        height: 1.125rem;
      }

      .pkt-listbox__search input {
        padding: map.get(variables.$spacing, 'size-6') map.get(variables.$spacing, 'size-8');
        @include typography.get-text('pkt-txt-14-light');
      }
    }
  }
}
