@use 'functions/color' as *;
@use 'functions/get-var' as *;
@use 'functions/var-negative' as *;
@use 'mixins/button' as *;
@use 'mixins/shadow' as *;
@use 'variables' as *;

// Buttons
.btn {
  appearance: none;
  // background: $bg-color-light; // old spectre.css
  background: color('bg-color-light');
  // border: $border-width solid $primary-color; // old spectre.css
  border: get-var('border-width') solid color('primary-color');
  // border-radius: $border-radius; // old spectre.css
  border-radius: get-var('border-radius');
  // color: $primary-color; // old spectre.css
  color: color('primary-color');
  cursor: pointer;
  display: inline-block;
  // font-size: $font-size; // old spectre.css
  font-size: get-var('font-size');
  // height: $control-size; // old spectre.css
  height: get-var('control-size');
  // line-height: $line-height; // old spectre.css
  line-height: get-var('line-height');
  outline: none;
  // padding: $control-padding-y $control-padding-x; // old spectre.css
  padding: get-var('control-padding-y') get-var('control-padding-x');
  text-align: center;
  text-decoration: none;
  // transition: background 0.2s, border 0.2s, box-shadow 0.2s, color 0.2s; // old spectre.css
  transition: background get-var('transition-duration'),
    border get-var('transition-duration'),
    box-shadow get-var('transition-duration'),
    color get-var('transition-duration');
  user-select: none;
  vertical-align: middle;
  white-space: nowrap;
  &:visited {
    // color: $primary-color-dark; // old spectre.css
    color: color('primary-color-dark');
  }
  &:focus {
    @include control-shadow();
  }
  &:focus,
  &:hover {
    // background: $secondary-color; // old spectre.css
    background: color('secondary-color');
    // border-color: $primary-color-dark; // old spectre.css
    border-color: color('primary-color-dark');
    text-decoration: none;
  }
  &:active,
  &.active {
    // background: $primary-color-dark; // old spectre.css
    background: color('primary-color-dark');
    // border-color: darken($primary-color-dark, 5%); // old spectre.css
    border-color: color('primary-color-dark', $lightness: -5%);
    // color: $light-color; // old spectre.css
    color: color('light-color');
    text-decoration: none;
    &.loading {
      &::after {
        // border-bottom-color: $light-color; // old spectre.css
        border-bottom-color: color('light-color');
        // border-left-color: $light-color; // old spectre.css
        border-left-color: color('light-color');
      }
    }
  }
  &[disabled],
  &:disabled,
  &.disabled {
    cursor: default;
    opacity: 0.5;
    pointer-events: none;
  }

  // Button Primary
  &.btn-primary {
    // background: $primary-color; // old spectre.css
    background: color('primary-color');
    // border-color: $primary-color-dark; // old spectre.css
    border-color: color('primary-color-dark');
    // color: $light-color; // old spectre.css
    color: color('light-color');
    &:visited {
      // color: $light-color; // old spectre.css
      color: color('light-color');
    }
    &:focus,
    &:hover {
      // background: darken($primary-color-dark, 2%); // old spectre.css
      background: color('primary-color-dark', $lightness: -2%);
      // border-color: darken($primary-color-dark, 5%); // old spectre.css
      border-color: color('primary-color-dark', $lightness: -5%);
      // color: $light-color; // old spectre.css
      color: color('light-color');
    }
    &:active,
    &.active {
      // background: darken($primary-color-dark, 4%); // old spectre.css
      background: color('primary-color-dark', $lightness: -4%);
      // border-color: darken($primary-color-dark, 7%); // old spectre.css
      border-color: color('primary-color-dark', $lightness: -7%);
      // color: $light-color; // old spectre.css
      color: color('light-color');
    }
    &.loading {
      &::after {
        // border-bottom-color: $light-color; // old spectre.css
        border-bottom-color: color('light-color');
        // border-left-color: $light-color; // old spectre.css
        border-left-color: color('light-color');
      }
    }
  }

  // Button Colors
  &.btn-success {
    // @include button-variant($success-color); // old spectre.css
    @include button-variant('success-color');
  }

  &.btn-error {
    // @include button-variant($error-color); // old spectre.css
    @include button-variant('error-color');
  }

  // Button Link
  &.btn-link {
    background: transparent;
    border-color: transparent;
    // color: $link-color; // old spectre.css
    color: color('link-color');
    &:visited,
    &:focus,
    &:hover,
    &:active,
    &.active {
      // color: $link-color-dark; // old spectre.css
      color: color('link-color-dark');
    }
  }

  // Button Sizes
  &.btn-sm {
    // font-size: $font-size-sm; // old spectre.css
    font-size: get-var('font-size', $suffix: 'sm');
    // height: $control-size-sm; // old spectre.css
    height: get-var('control-size', $suffix: 'sm');
    // padding: $control-padding-y-sm $control-padding-x-sm; // old spectre.css
    padding: get-var('control-padding-y', $suffix: 'sm') get-var('control-padding-x', $suffix: 'sm');

  }

  &.btn-lg {
    // font-size: $font-size-lg; // old spectre.css
    font-size: get-var('font-size', $suffix: 'lg');
    // height: $control-size-lg; // old spectre.css
    height: get-var('control-size', $suffix: 'lg');
    // padding: $control-padding-y-lg $control-padding-x-lg; // old spectre.css
    padding: get-var('control-padding-y', $suffix: 'lg') get-var('control-padding-x', $suffix: 'lg');
  }

  // Button Block
  &.btn-block {
    display: block;
    width: 100%;
  }

  // Button Action
  &.btn-action {
    // width: $control-size; // old spectre.css
    width: get-var('control-size');

    padding-left: 0;
    padding-right: 0;

    &.btn-sm {
      // width: $control-size-sm; // old spectre.css
      width: get-var('control-size', $suffix: 'sm');
    }

    &.btn-lg {
      // width: $control-size-lg; // old spectre.css
      width: get-var('control-size', $suffix: 'lg');
    }
  }

  // Button Clear
  &.btn-clear {
    background: transparent;
    border: 0;
    color: currentColor;
    // height: $unit-5; // old spectre.css
    height: get-var('unit-5');
    // line-height: $unit-4; // old spectre.css
    line-height: get-var('unit-4');
    // margin-left: $unit-1; // old spectre.css
    margin-left: get-var('unit-1');
    margin-right: -2px;
    opacity: 1;
    // padding: $unit-h; // old spectre.css
    padding: get-var('unit-h');
    text-decoration: none;
    // width: $unit-5; // old spectre.css
    width: get-var('unit-5');

    &:focus,
    &:hover {
      // background: rgba($bg-color, .5); // old spectre.css
      background: color('bg-color', $alpha: 0.5);
      opacity: 0.95;
    }

    &::before {
      content: '\2715';
    }
  }
}

// Button groups
.btn-group {
  display: inline-flex;
  flex-wrap: wrap;

  .btn {
    flex: 1 0 auto;
    &:first-child:not(:last-child) {
      border-bottom-right-radius: 0;
      border-top-right-radius: 0;
    }
    &:not(:first-child):not(:last-child) {
      border-radius: 0;
      // margin-left: -$border-width; // old spectre.css
      margin-left: var-negative(get-var('border-width'));
    }
    &:last-child:not(:first-child) {
      border-bottom-left-radius: 0;
      border-top-left-radius: 0;
      // margin-left: -$border-width; // old spectre.css
      margin-left: var-negative(get-var('border-width'));
    }
    &:focus,
    &:hover,
    &:active,
    &.active {
      // z-index: $zindex-0; // old spectre.css
      z-index: get-var('z-index-0');
    }
  }

  &.btn-group-block {
    display: flex;

    .btn {
      flex: 1 0 0;
    }
  }
}
