@use '../../theme/styles' as theme;

.wr-switch {
  --wr-switch-track-width: 2rem;
  --wr-switch-track-height: 1.125rem; // md = checkbox/radio box (18px)
  --wr-switch-thumb-size: 0.875rem;
  --wr-switch-font-size: var(--wr-text-sm);
  --wr-switch-line-height: var(--wr-control-line-height-md);
  --wr-switch-bg: var(--wr-color-light);
  --wr-switch-bg-checked: var(--wr-color-primary);
  --wr-switch-thumb: var(--wr-color-white);
  --wr-switch-color: var(--wr-color-dark);

  display: inline-flex;
  vertical-align: middle;
  color: var(--wr-switch-color);
  font-family: var(--wr-font-family-base);
  font-size: var(--wr-switch-font-size);
  line-height: var(--wr-switch-line-height);

  &__label {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    cursor: pointer;
    user-select: none;
  }

  &__input {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    border: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;

    &:focus-visible + .wr-switch__track {
      box-shadow: 0 0 0 3px rgba(var(--wr-color-primary-rgb), 0.25);
    }
  }

  &__track {
    flex: 0 0 auto;
    position: relative;
    width: var(--wr-switch-track-width);
    height: var(--wr-switch-track-height);
    background: var(--wr-switch-bg);
    border-radius: var(--wr-border-radius-pill);
    transition: background var(--wr-transition-base);
  }

  &__thumb {
    position: absolute;
    top: 50%;
    left: calc((var(--wr-switch-track-height) - var(--wr-switch-thumb-size)) / 2);
    transform: translateY(-50%);
    width: var(--wr-switch-thumb-size);
    height: var(--wr-switch-thumb-size);
    background: var(--wr-switch-thumb);
    border-radius: 50%;
    box-shadow: var(--wr-shadow-xs);
    transition: left var(--wr-transition-base);
  }

  // Sizes — track, thumb, label font + line-height scale together.
  &--sm {
    --wr-switch-track-width: 1.75rem;
    --wr-switch-track-height: 1rem;
    --wr-switch-thumb-size: 0.75rem;
    --wr-switch-font-size: var(--wr-text-xs);
    --wr-switch-line-height: var(--wr-control-line-height-sm);
  }

  &--lg {
    --wr-switch-track-width: 2.375rem;
    --wr-switch-track-height: 1.25rem;
    --wr-switch-thumb-size: 1rem;
    --wr-switch-font-size: var(--wr-text-base);
    --wr-switch-line-height: var(--wr-control-line-height-lg);
  }

  &--checked {
    --wr-switch-bg: var(--wr-switch-bg-checked);

    .wr-switch__thumb {
      left: calc(
        var(--wr-switch-track-width) - var(--wr-switch-thumb-size) -
          ((var(--wr-switch-track-height) - var(--wr-switch-thumb-size)) / 2)
      );
    }
  }

  &--disabled {
    --wr-switch-color: var(--wr-color-medium);
    pointer-events: none;
    opacity: 0.6;
  }
}
