/*
* Button theme
*
*/

@import '../../../../style/core/utilities.scss';
@import './button-mixins.scss';

// Because the tertiary button has so much code,
// we slice the shareable parts out in a separate file
@import '../button--tertiary.scss';

.dnb-button {
  // global
  --button-background--focus: var(--sb-color-blue-light-3);
  --button-border-radius--control-button: 3rem;
  --button-padding--large: 1.5rem;

  // primary
  --button-primary-shadow: var(--sb-shadow-medium);
  --button-primary-shadow--hover: var(--sb-shadow-medium);
  --button-primary-color: var(--sb-color-white);
  --button-primary-color--hover: var(--sb-color-purple-alternative);
  --button-primary-color--active: var(--sb-color-white);
  --button-primary-color--disabled: var(--sb-color-gray-dark-2);
  --button-primary-background: var(--sb-color-purple-alternative);
  --button-primary-background--hover: var(--sb-color-green);
  --button-primary-background--active: var(--sb-color-purple-alternative);
  --button-primary-background--disabled: var(--sb-color-gray-light);
  --button-primary-border--hover: transparent;

  // secondary
  --button-secondary-color: var(--sb-color-purple-alternative);
  --button-secondary-color--hover: var(--sb-color-purple-alternative);
  --button-secondary-color--active: var(--sb-color-purple-alternative);
  --button-secondary-color--disabled: var(--sb-color-gray-dark);
  --button-secondary-background: var(--sb-color-white);
  --button-secondary-background--hover: var(--sb-color-green);
  --button-secondary-background--active: var(--sb-color-white);
  --button-secondary-border: var(--button-secondary-border--default);
  --button-secondary-border--default: var(--sb-color-purple-alternative);
  --button-secondary-border--hover: var(
    --button-secondary-border--default
  );
  --button-secondary-border--active: var(
    --button-secondary-border--default
  );
  --button-secondary-border--disabled: var(--sb-color-gray-light);

  // tertiary
  --button-tertiary-color: var(--sb-color-violet);
  --button-tertiary-border: var(--sb-color-violet);

  border: none;

  &--has-text#{&}--size-large {
    --button-padding-icon: 1rem;
  }

  &--primary {
    color: var(--button-primary-color);
    background-color: var(--button-primary-background);
    box-shadow: var(--button-primary-shadow);

    @include hover() {
      color: var(--button-primary-color--hover);
      background-color: var(--button-primary-background--hover);

      @include fakeBorder(
        $color: var(--button-primary-border--hover),
        $inset: inset,
        $extendShadow: var(--button-primary-shadow--hover)
      ); // only for error button
    }

    @include active() {
      color: var(--button-primary-color--active);
      background-color: var(--button-primary-background--active);
    }
  }

  &--secondary {
    color: var(--button-secondary-color);
    background-color: var(--button-secondary-background);
    @include fakeBorder(var(--button-secondary-border), null, inset);

    @include hover() {
      --button-secondary-border: var(--button-secondary-border--hover);
      color: var(--button-secondary-color--hover);
      background-color: var(--button-secondary-background--hover);
    }

    @include active() {
      --button-secondary-border: var(--button-secondary-border--active);
      color: var(--button-secondary-color--active);
      background-color: var(--button-secondary-background--active);
    }
  }
  &--secondary:not(#{&}--has-text)#{&}--control-before,
  &--secondary:not(#{&}--has-text)#{&}--control-after {
    box-shadow: none;
    border: none;
    @include hover() {
      box-shadow: none;
      border: none;
    }
  }

  &--primary,
  &--secondary {
    @include focus-visible() {
      color: var(--sb-color-blue-dark);
      background-color: var(--button-background--focus);

      @include focusRing(
        $whatinput: 'always',
        $inset: inset,
        $extendShadow: var(--sb-shadow-medium)
      );
    }
  }

  &[disabled] {
    // primary
    --button-primary-shadow: 0 0 transparent;
    --button-primary-color: var(--button-primary-color--disabled);
    --button-primary-background: var(
      --button-primary-background--disabled
    );

    // secondary
    --button-secondary-color: var(--button-secondary-color--disabled);
    --button-secondary-border--default: var(
      --button-secondary-border--disabled
    );
  }

  &:not([disabled]).dnb-button__status--error {
    // primary
    --button-primary-shadow--hover: 0 0 transparent;
    --button-primary-color: var(--sb-color-white);
    --button-primary-color--hover: var(--sb-color-red);
    --button-primary-color--active: var(--sb-color-white);
    --button-primary-background: var(--sb-color-red);
    --button-primary-background--hover: var(--sb-color-magenta-light-3);
    --button-primary-background--active: var(--sb-color-red);
    --button-primary-border--hover: var(--sb-color-red);

    // secondary
    --button-secondary-color: var(--sb-color-red);
    --button-secondary-color--hover: var(--sb-color-red);
    --button-secondary-color--active: var(--sb-color-red);
    --button-secondary-background--hover: var(--sb-color-magenta-light-3);
    --button-secondary-border--default: var(--sb-color-red);

    // tertiary
    --button-tertiary-color: var(--sb-color-red);
    --button-tertiary-border: var(--sb-color-red);
  }

  &--tertiary {
    --button-tertiary-focus-overflow--icon-top: 0;
    --button-tertiary-underline-overflow: -0.5rem;
    --button-tertiary-underline-overflow--icon: calc(
      (
          var(--button-icon-gutter) + var(--button-icon-size) - var(
              --button-tertiary-underline-overflow
            )
        ) * -1
    );
    --button-tertiary-underline-bottom: -0.5rem;
    --button-tertiary-text-bottom--icon: 0.5rem;
    --button-tertiary-text-top--icon: 0;

    color: var(--button-tertiary-color);
    background-color: transparent;

    .dnb-button__text::after {
      height: 0.0625rem;
      bottom: var(--button-tertiary-underline-bottom);
    }

    &.dnb-button--has-text {
      &.dnb-button--icon-position-top {
        --button-padding-left: calc(
          var(--button-tertiary-underline-overflow) * -1
        );
        --button-padding-right: calc(
          var(--button-tertiary-underline-overflow) * -1
        );
        .dnb-button__text {
          margin-top: var(--button-tertiary-text-top--icon);
          margin-bottom: var(--button-tertiary-text-bottom--icon);
          font-size: var(--button-font-size);
        }
      }
    }

    &.dnb-button--size-large {
      --button-tertiary-underline-bottom: -0.75rem;
      --button-tertiary-underline-overflow: -1.5rem;
      --button-tertiary-text-bottom--icon: 0.75rem;
      --button-tertiary-text-top--icon: 0.25rem;
    }

    @mixin focus-tertiary() {
      color: var(--sb-color-blue-dark);
      @include buttonFocusRing(
        'always',
        inset,
        var(--sb-shadow-medium),
        var(--button-tertiary-focus-left),
        var(--button-tertiary-focus-right)
      );

      &::before {
        background-color: var(--button-background--focus);
      }

      > * {
        z-index: 2;
      }
    }

    @include hover() {
      // underline
      &:not(:focus-visible) .dnb-button__text::after {
        color: var(--button-tertiary-border);
        transition: none;
      }

      &:not(.dnb-button--has-text) {
        --focus-ring-width: 0.0625rem;
        --sb-shadow-medium: 0 0 transparent;
        @include focus-tertiary();
      }
    }
    @include focus-visible() {
      @include focus-tertiary();
    }

    &[disabled] {
      color: var(--sb-color-gray-dark);
    }
  }
  &--on-dark-background {
    // primary
    --button-primary-color: var(--sb-color-text);
    --button-primary-color--hover: var(--sb-color-purple-alternative);
    --button-primary-color--active: var(--sb-color-purple-alternative);
    --button-primary-background: var(--sb-color-green);
    --button-primary-background--hover: var(--sb-color-violet-light-2);
    --button-primary-background--active: var(--sb-color-violet-light-3);

    // secondary
    --button-secondary-color: var(--sb-color-white);
    --button-secondary-color--hover: var(--sb-color-purple-alternative);
    --button-secondary-color--active: var(--sb-color-purple-alternative);
    --button-secondary-background: transparent;
    --button-secondary-background--hover: var(--sb-color-violet-light-2);
    --button-secondary-background--active: var(--sb-color-violet-light-3);
    --button-secondary-border--default: var(--sb-color-green);
    --button-secondary-border--hover: var(--sb-color-violet-light);
    --button-secondary-border--active: var(--sb-color-violet-light);

    // tertiary
    --button-tertiary-color: var(--sb-color-white);
    --button-tertiary-border: var(--sb-color-green);
  }
}
