// Buttons
// *******************************************************************************

// Basic
@mixin button-variant(
  $background: null,
  $border: null,
  $hover-background: null,
  $hover-border: null,
  $active-background: null,
  $active-border: null
) {
}
@mixin template-button-variant($parent, $background, $color: null, $border: null) {
  $background: $background;
  $border: $background;
  $color: if($color, $color, color-contrast($background));
  $hover-background: if(
    $color == $color-contrast-light,
    shade-color($background, $btn-hover-bg-shade-amount),
    tint-color($background, $btn-hover-bg-tint-amount)
  );
  $hover-border: if(
    $color == $color-contrast-light,
    shade-color($border, $btn-hover-border-shade-amount),
    tint-color($border, $btn-hover-border-tint-amount)
  );
  $hover-color: color-contrast($hover-background);

  $active-background: if(
    $color == $color-contrast-light,
    shade-color($background, $btn-active-bg-shade-amount),
    tint-color($background, $btn-active-bg-tint-amount)
  );
  $active-border: if(
    $color == $color-contrast-light,
    shade-color($border, $btn-active-border-shade-amount),
    tint-color($border, $btn-active-border-tint-amount)
  );
  $active-color: color-contrast($active-background);

  #{$parent} {
    color: $color;
    @include gradient-bg($background);
    border-color: $border;
    @include box-shadow($btn-box-shadow);
    &:hover {
      color: $hover-color !important;
      @include gradient-bg($hover-background !important);
      border-color: $hover-border !important;
    }

    .btn-check:focus + &,
    &:focus,
    &.focus {
      color: $hover-color;
      @include gradient-bg($hover-background);
      border-color: $hover-border;
      box-shadow: none;
    }

    .btn-check:checked + &,
    .btn-check:active + &,
    &:active,
    &.active,
    &.show.dropdown-toggle,
    .show > &.dropdown-toggle {
      color: $active-color !important;
      background-color: $active-background !important;
      // Remove CSS gradients if they're enabled
      background-image: if($enable-gradients, none !important, null);
      border-color: $active-border !important;

      &:focus {
        box-shadow: none;
      }
    }
  }

  // Button groups
  .btn-group #{$parent},
  .input-group #{$parent} {
    border-right: $input-btn-border-width solid $active-background;
    border-left: $input-btn-border-width solid $active-background;
  }
}

@mixin template-button-text-variant($parent, $background, $color: null, $border: null) {
  $border: transparent;

  $label-color: if($color, $color, $background);

  $hover-color: $background;
  $hover-background: $background;
  $hover-background: if(
    $hover-color == $color-contrast-light,
    shade-color($background, $btn-text-hover-shade-amount, $card-bg),
    tint-color($background, $btn-text-hover-tint-amount, $card-bg)
  );

  $focus-background: if(
    $hover-color == $color-contrast-light,
    shade-color($background, $btn-text-focus-shade-amount, $card-bg),
    tint-color($background, $btn-text-focus-tint-amount, $card-bg)
  );

  $active-color: $hover-color;
  $active-background: if(
    $active-color == $color-contrast-light,
    shade-color($background, $btn-text-active-shade-amount, $card-bg),
    tint-color($background, $btn-text-active-tint-amount, $card-bg)
  );

  #{$parent} {
    color: $label-color;
    &.waves-effect {
      .waves-ripple {
        background: radial-gradient(
          rgba($background, 0.2) 0,
          rgba($background, 0.3) 40%,
          rgba($background, 0.4) 50%,
          rgba($background, 0.5) 60%,
          rgba($white, 0) 70%
        );
      }
    }

    &:hover {
      border-color: $border;
      background: $hover-background;
      color: $hover-color;
    }

    &:focus,
    &.focus {
      color: $hover-color;
      background: $focus-background;
    }

    &:active,
    &.active,
    &.show.dropdown-toggle,
    .show > &.dropdown-toggle {
      color: $active-color !important;
      background: $active-background !important;
      // Remove CSS gradients if they're enabled
      background-image: if($enable-gradients, none !important, null);
      border-color: $border !important;
    }
  }
}

// Label
@mixin button-label-variant($background: null, $border: null, $active-background: null, $active-border: null) {
}

@mixin template-button-label-variant($parent, $background, $color: null, $border: null) {
  // Using the $dark-style variable for condition as in label style text color can't compare with $color-contrast-light/dark
  $border: transparent;

  $label-color: if($color, $color, $background);
  $hover-color: if($color, $color, color-contrast($background));

  $label-background: if(
    $hover-color == $color-contrast-light,
    shade-color($background, $btn-label-bg-shade-amount, $card-bg),
    tint-color($background, $btn-label-bg-tint-amount, $card-bg)
  );

  $hover-color: $background;
  $hover-background: $background;
  $hover-background: if(
    $hover-color == $color-contrast-light,
    shade-color($background, $btn-label-hover-shade-amount, $card-bg),
    tint-color($background, $btn-label-hover-tint-amount, $card-bg)
  );

  $focus-background: if(
    $hover-color == $color-contrast-light,
    shade-color($background, $btn-label-focus-shade-amount, $card-bg),
    tint-color($background, $btn-label-focus-tint-amount, $card-bg)
  );

  $active-color: $hover-color;
  $active-background: if(
    $active-color == $color-contrast-light,
    shade-color($background, $btn-label-active-shade-amount, $card-bg),
    tint-color($background, $btn-label-active-tint-amount, $card-bg)
  );

  #{$parent} {
    color: $label-color;
    border-color: $label-background;
    background: $label-background;
    &.waves-effect {
      .waves-ripple {
        background: radial-gradient(
          rgba($background, 0.2) 0,
          rgba($background, 0.3) 40%,
          rgba($background, 0.4) 50%,
          rgba($background, 0.5) 60%,
          rgba($white, 0) 70%
        );
      }
    }

    &:hover {
      border-color: $hover-background !important;
      background: $hover-background !important;
      color: $hover-color !important;
    }

    &:focus,
    &.focus {
      color: $hover-color;
      background: $focus-background;
      border-color: $focus-background;
    }

    &:active,
    &.active,
    &.show.dropdown-toggle,
    .show > &.dropdown-toggle {
      color: $active-color !important;
      background-color: $active-background !important;
      // Remove CSS gradients if they're enabled
      background-image: if($enable-gradients, none !important, null);
      border-color: $active-background !important;
    }
  }

  // Button groups
  .btn-group #{$parent},
  .input-group #{$parent} {
    border-right: $input-btn-border-width solid $active-background;
    border-left: $input-btn-border-width solid $active-background;
  }
}

// Outline
@mixin button-outline-variant($color: null, $color-hover: null, $hover-color: null) {
}

@mixin template-button-outline-variant($parent, $color, $hover-color: null) {
  $color: $color;
  $color-hover: $color;

  $border-color: if(
    $color == $color-contrast-light,
    shade-color($color, $btn-outline-border-shade-amount, $card-bg),
    tint-color($color, $btn-outline-border-tint-amount, $card-bg)
  );

  $hover-background: if(
    $color-hover == $color-contrast-light,
    shade-color($color, $btn-outline-hover-bg-shade-amount, $card-bg),
    tint-color($color, $btn-outline-hover-bg-tint-amount, $card-bg)
  );

  $focus-background: if(
    $color == $color-contrast-light,
    shade-color($color, $btn-outline-focus-bg-shade-amount, $card-bg),
    tint-color($color, $btn-outline-focus-bg-tint-amount, $card-bg)
  );
  $active-background: if(
    $color == $color-contrast-light,
    shade-color($color, $btn-outline-active-bg-shade-amount, $card-bg),
    tint-color($color, $btn-outline-active-bg-tint-amount, $card-bg)
  );
  $active-border: $border-color;
  $active-color: $color;

  #{$parent} {
    color: $color;
    border-color: $border-color;
    background: transparent;
    &.waves-effect {
      .waves-ripple {
        background: radial-gradient(
          rgba($color, 0.2) 0,
          rgba($color, 0.3) 40%,
          rgba($color, 0.4) 50%,
          rgba($color, 0.5) 60%,
          rgba($white, 0) 70%
        );
      }
    }

    &:hover {
      color: $color-hover !important;
      background-color: $hover-background !important;
      border-color: $border-color !important;
    }

    .btn-check:focus + &,
    &:focus {
      color: $color-hover;
      background-color: $focus-background;
      border-color: $active-border;
    }

    .btn-check:checked + &,
    .btn-check:active + &,
    &:active,
    &.active,
    &.dropdown-toggle.show {
      color: $active-color !important;
      background-color: $active-background !important;
      border-color: $active-border !important;
    }
  }

  #{$parent} .badge {
    background: $color;
    border-color: $color;
    color: color-contrast($color);
  }

  #{$parent}:hover .badge,
  #{$parent}:focus:hover .badge,
  #{$parent}:active .badge,
  #{$parent}.active .badge,
  .show > #{$parent}.dropdown-toggle .badge {
    background: $color-hover;
    border-color: $color-hover;
    color: color-contrast($color-hover);
  }
}
