//
// Copyright IBM Corp. 2016, 2018
//
// This source code is licensed under the Apache-2.0 license found in the
// LICENSE file in the root directory of this source tree.
//

@use "../../config" as *;
@use "../../spacing" as *;
@use "../../theme" as *;
@use "../../type" as *;
@use "../../utilities/convert" as *;
@use "../../utilities/skeleton" as *;
@use "../../utilities/visually-hidden" as *;
@use "../../utilities/focus-outline" as *;

@use "../form";

@mixin checkbox {
  .#{$prefix}--form-item.#{$prefix}--checkbox-wrapper {
    margin-bottom: $spacing-05;

    .#{$prefix}--fieldset__inline & {
      margin-right: $spacing-05;
      margin-top: $spacing-03;
      margin-bottom: $spacing-03;
      flex: none;
    }
  }

  .#{$prefix}--checkbox {
    @include visually-hidden;
    display: none;
  }

  .#{$prefix}--checkbox-label {
    @include reset;
    @include font-family("sans");
    // @include font-smoothing;
    @include type-style("label-02");
    display: flex;
    align-items: center;
    cursor: pointer;
    position: relative;
    padding-left: $spacing-06 + 0.1;
    min-height: calcRem(18px);
  }

  .#{$prefix}--checkbox-label::before {
    box-sizing: border-box;
    content: "";
    position: absolute;
    left: 0;
    top: calc(50% - 9px);
    height: calcRem(18px);
    width: calcRem(18px);
    border: 2px solid $field-background-disabled;
    border-radius: 4px;
    background-color: $background-main;
  }

  // Checkmark
  .#{$prefix}--checkbox-label::after {
    content: "";
    width: 10px;
    height: 5px;
    background: none;
    border-left: 2px solid $background-main;
    border-bottom: 2px solid $background-main;
    transform: scale(0) rotate(-45deg);
    position: absolute;
    left: calcRem(3px);
    top: 50%;
    margin-top: calcRem(-5px);
    box-sizing: content-box;
  }

  .#{$prefix}--checkbox:checked + .#{$prefix}--checkbox-label::before,
  .#{$prefix}--checkbox:indeterminate + .#{$prefix}--checkbox-label::before,
  .#{$prefix}--checkbox-label[data-contained-checkbox-state="true"]::before,
  .#{$prefix}--checkbox-label[data-contained-checkbox-state="mixed"]::before {
    background-color: $field-background-enabled;
    border-color: $action-default-fill-primary-default;
  }

  .#{$prefix}--checkbox:checked + .#{$prefix}--checkbox-label::after,
  .#{$prefix}--checkbox-label[data-contained-checkbox-state="true"]::after {
    opacity: 1;
    transform: scale(1) rotate(-45deg);
  }

  .#{$prefix}--checkbox:not(:checked) + .#{$prefix}--checkbox-label::after {
    opacity: 0;
    transform: scale(0) rotate(-45deg);
  }

  .#{$prefix}--checkbox:focus + .#{$prefix}--checkbox-label::before,
  .#{$prefix}--checkbox-label__focus::before {
    @include focus-outline("blurred");
  }

  // Indeterminate dash
  .#{$prefix}--checkbox:indeterminate + .#{$prefix}--checkbox-label::after,
  .#{$prefix}--checkbox-label[data-contained-checkbox-state="mixed"]::after {
    transform: scale(1) rotate(0deg);
    border-left: 0 solid $background-main;
    border-bottom: 2px solid $background-main;
    opacity: 1;
    width: calcRem(12px);
    margin-top: calcRem(-6px);
  }

  //Disabled
  .#{$prefix}--checkbox:disabled + .#{$prefix}--checkbox-label,
  .#{$prefix}--checkbox:disabled ~ .#{$prefix}--checkbox-label-text,
  .#{$prefix}--checkbox-label[data-contained-checkbox-disabled="true"] {
    opacity: 0.5;
    cursor: not-allowed;
  }

  .#{$prefix}--checkbox-appearance {
    position: absolute;
    left: 0;
    top: calc(50% - 9px);
    display: inline-block;
    height: calcRem(18px);
    width: calcRem(18px);
    margin-right: $spacing-03;
    background-color: $fill-field;
    border: 2px solid $field-border-color;
    min-width: calcRem(18px);
  }

  // Backwards compatibilty for old checkbox html using .#{$prefix}--checkbox-appearance
  .#{$prefix}--checkbox:checked
    + .#{$prefix}--checkbox-label
    .#{$prefix}--checkbox-appearance {
    top: calcRem(-1px);
  }

  .#{$prefix}--checkbox:checked + .#{$prefix}--checkbox-appearance,
  .#{$prefix}--checkbox:checked
    + .#{$prefix}--checkbox-label
    .#{$prefix}--checkbox-appearance {
    display: flex;
    align-items: baseline;
    background-color: $action-default-fill-primary-default;
    border-color: $field-background-enabled;
  }

  .#{$prefix}--checkbox:focus
    + .#{$prefix}--checkbox-label
    .#{$prefix}--checkbox-appearance,
  .#{$prefix}--checkbox:focus + .#{$prefix}--checkbox-appearance {
    @include focus-outline("blurred");
  }

  .#{$prefix}--checkbox:disabled + .#{$prefix}--checkbox-appearance {
    opacity: 0.5;
    cursor: not-allowed;
  }

  .#{$prefix}--checkbox-checkmark {
    display: none;
    fill: $icon-inverse;
    width: 100%;
    height: 100%;
  }

  .#{$prefix}--checkbox-wrapper--invalid {
    .#{$prefix}--checkbox-label::before {
      border-color: $support-error-main;
    }
    .#{$prefix}--checkbox:checked + .#{$prefix}--checkbox-label::before {
      background-color: $support-error-main;
      border-color: $support-error-main;
    }
  }

  .#{$prefix}--checkbox:checked
    + .#{$prefix}--checkbox-appearance
    .#{$prefix}--checkbox-checkmark,
  .#{$prefix}--checkbox:checked
    + .#{$prefix}--checkbox-label
    .#{$prefix}--checkbox-appearance
    .#{$prefix}--checkbox-checkmark {
    display: block;

    @-moz-document url-prefix() {
      & {
        stroke: $action-default-fill-primary-default;
      }
    }
  }
}
