// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
// Copyright (c) KALEIDOS INC Sucursal en España SL

@use "ds/_borders.scss" as *;
@use "ds/_sizes.scss" as *;
@use "ds/typography.scss" as *;
@use "ds/colors.scss" as *;
@use "ds/mixins.scss" as *;
@use "ds/z-index.scss" as *;
@use "ds/_utils.scss" as *;

.custom-select {
  @include custom-scrollbar;
  @include use-typography("body-small");

  --border-color: var(--color-background-tertiary);
  --bg-color: var(--color-background-tertiary);
  --icon-color: var(--color-foreground-secondary);
  --text-color: var(--color-foreground-primary);

  position: relative;
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  block-size: $sz-32;
  inline-size: 100%;
  margin: 0;
  padding: var(--sp-s);
  border-radius: $br-8;
  background-color: var(--bg-color);
  border: $b-1 solid var(--border-color);
  color: var(--text-color);
  cursor: pointer;

  &.icon {
    grid-template-columns: auto 1fr auto;
  }

  &:hover {
    --bg-color: var(--color-background-quaternary);
    --border-color: var(--color-background-tertiary);
    --icon-color: var(--color-foreground-primary);
  }

  &:has(*:focus-visible) {
    --bg-color: var(--color-background-tertiary);
    --border-color: var(--color-accent-primary);
  }
}

.searchable-select {
  --searchable-select-bg-color: var(--color-background-tertiary);
  --searchable-select-icon-color: var(--color-foreground-secondary);
  --searchable-select-outline-color: none;

  background: var(--searchable-select-bg-color);
  outline: $b-1 solid var(--searchable-select-outline-color);

  &:hover {
    --searchable-select-bg-color: var(--color-background-quaternary);
  }

  &:has(*:focus-visible) {
    --searchable-select-bg-color: var(--color-background-primary);
    --searchable-select-outline-color: var(--color-accent-primary);
  }

  &:has(*:disabled) {
    --searchable-select-bg-color: var(--color-background-primary);
    --searchable-select-outline-color: var(--color-background-quaternary);
  }

  &[data-option-focused="true"]:has(*:focus-visible) {
    --searchable-select-bg-color: var(--color-background-tertiary);
    --searchable-select-outline-color: none;
  }
}

.disabled {
  --bg-color: var(--color-background-primary);
  --border-color: var(--color-background-quaternary);
  --icon-color: var(--color-foreground-secondary);
  --text-color: var(--color-foreground-secondary);

  pointer-events: none;
  cursor: default;
}

.dropdown-button {
  display: flex;
  justify-content: center;
  align-items: center;
  margin-inline-end: var(--sp-xxs);

  svg {
    display: flex;
    align-items: center;
    gap: var(--sp-xxs);
    color: transparent;
    fill: none;
    block-size: $sz-12;
    inline-size: $sz-12;
    stroke-width: 1.33px;
    stroke: var(--color-foreground-secondary);
    transform: rotate(90deg);
  }
}

.current-icon {
  display: flex;
  justify-content: center;
  align-items: center;
  inline-size: $sz-24;
  padding-inline-end: var(--sp-xs);

  svg {
    display: flex;
    align-items: center;
    gap: var(--sp-xxs);
    color: transparent;
    fill: none;
    block-size: $sz-12;
    inline-size: $sz-12;
    stroke-width: 1.33px;
    visibility: hidden;
    stroke: var(--color-foreground-secondary);
  }
}

.custom-select-dropdown {
  box-shadow: 0 0 $sz-12 0 var(--color-shadow-dark);
  position: absolute;
  top: $sz-32;
  left: 0;
  inline-size: 100%;
  max-block-size: var(--menu-max-height, px2rem(300));
  padding: var(--sp-xxs);
  margin: 0;
  margin-block-start: 1px;
  border-radius: $br-8;
  z-index: var(--z-index-dropdown);
  overflow: hidden auto;
  background-color: var(--color-background-tertiary);
  color: var(--color-foreground-primary);
  border: $b-2 solid var(--color-background-quaternary);

  .separator {
    margin: 0;
    block-size: $sz-12;
    border-block-start: $b-1 solid var(--color-background-quaternary);
  }

  &[data-direction="up"] {
    bottom: $sz-32;
    top: auto;
    max-block-size: var(--menu-max-height-up, px2rem(300));
  }
}

.current-label-input {
  @include text-ellipsis;

  inline-size: 100%;
  block-size: 100%;
  margin: 0;
  padding: 0;
  border: none;
  background-color: transparent;
  color: inherit;
  font: inherit;
  outline: none;
  cursor: pointer;

  &::placeholder {
    color: inherit;
    opacity: 1;
  }

  &:focus {
    cursor: text;
  }

  &:disabled {
    cursor: default;
  }
}

.custom-select-no-matches {
  @include use-typography("body-small");

  padding: var(--sp-s) var(--sp-m);
  color: var(--color-foreground-secondary);
  text-align: center;
  pointer-events: none;
}

.custom-select-dropdown[data-direction="up"] {
  bottom: $sz-32;
  top: auto;
}

.checked-element {
  @include use-typography("body-small");

  display: flex;
  align-items: center;
  gap: var(--sp-s);
  block-size: $sz-32;
  padding: 0 var(--sp-s);
  border-radius: $br-6;
  cursor: pointer;
  color: var(--color-foreground-primary);

  &:hover {
    background-color: var(--color-background-quaternary);
    color: var(--color-foreground-primary);

    svg {
      stroke: var(--color-foreground-primary);
    }
  }

  span {
    @include text-ellipsis;

    display: flex;
    align-items: center;

    svg {
      display: flex;
      align-items: center;
      gap: var(--sp-xxs);
      color: transparent;
      fill: none;
      block-size: $sz-12;
      inline-size: $sz-12;
      stroke-width: 1.33px;
      visibility: hidden;
      stroke: var(--color-foreground-secondary);
    }
  }

  .icon {
    display: flex;
    justify-content: center;
    align-items: center;
    block-size: $sz-24;
    inline-size: $sz-24;
    padding-inline-end: var(--sp-xs);

    svg {
      display: flex;
      align-items: center;
      gap: var(--sp-xxs);
      color: transparent;
      fill: none;
      block-size: $sz-16;
      width: $sz-16;
      stroke-width: px2rem(1);
      visibility: hidden;
      stroke: var(--color-foreground-secondary);
    }
  }

  .label {
    flex-grow: 1;
    inline-size: 100%;
  }

  .check-icon {
    display: flex;
    justify-content: center;
    align-items: center;

    svg {
      display: flex;
      align-items: center;
      gap: var(--sp-xxs);
      color: transparent;
      fill: none;
      block-size: $sz-12;
      inline-size: $sz-12;
      stroke-width: 1.33px;
      visibility: hidden;
      stroke: var(--color-foreground-secondary);
    }
  }

  &.is-selected {
    color: var(--color-accent-primary);
    background-color: var(--color-background-quaternary);

    .check-icon svg {
      stroke: var(--color-foreground-primary);
      visibility: visible;
    }
  }

  &.disabled {
    display: none;
  }
}

.current-label {
  @include text-ellipsis;
}
