//
// 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.
//

@import '../../globals/scss/vars';
@import '../../globals/scss/css--reset';
@import '../../globals/scss/helper-mixins';
@import '../../globals/scss/vendor/@carbon/elements/scss/import-once/import-once';
@import '../button/button';
@import '../form/form';
@import '../loading/loading';
@import '../../globals/scss/vendor/@carbon/elements/scss/type/styles';

/// File uploader styles
/// @access private
/// @group file-uploader
@mixin file-uploader {
  .#{$prefix}--file {
    width: 100%;
  }

  .#{$prefix}--file--invalid {
    margin-right: $carbon--spacing-03;
    fill: $support-01;
  }

  // TODO: sync with type
  .#{$prefix}--file--label {
    @include reset;
    @include type-style('productive-heading-01');

    margin-bottom: $carbon--spacing-03;
    color: $text-01;
  }

  .#{$prefix}--file--label--disabled {
    color: $disabled-02;
  }

  .#{$prefix}--file-input {
    @include hidden;
  }

  // This class is of old markup with "select file" button
  // New code should use link-style "select file" UI (`.bx--file-browse-btn`)
  // TODO: deprecate this block
  .#{$prefix}--file-btn {
    display: inline-flex;
    padding-right: to-rem(64px);
    margin: 0;
  }

  .#{$prefix}--file-browse-btn {
    display: inline-block;
    width: 100%;
    max-width: to-rem(320px);
    @if not feature-flag-enabled('enable-v11-release') {
      margin-bottom: $carbon--spacing-03;
    }

    color: $link-01;
    cursor: pointer;
    outline: 2px solid transparent;
    outline-offset: -2px;
    transition: $duration--fast-02 motion(standard, productive);

    &:focus,
    &:hover {
      outline: 2px solid $interactive-03;
    }

    &:hover,
    &:focus,
    &:active,
    &:active:visited {
      text-decoration: underline;
    }

    &:active {
      color: $text-01;
    }
  }

  .#{$prefix}--file-browse-btn--disabled {
    color: $disabled-02;
    cursor: no-drop;
    text-decoration: none;

    &:hover,
    &:focus {
      color: $disabled-02;
      outline: none;
      text-decoration: none;
    }
  }

  .#{$prefix}--file-browse-btn--disabled .#{$prefix}--file__drop-container {
    border: 1px dashed $disabled-02;
  }

  .#{$prefix}--label-description {
    @include reset;
    @include type-style('body-short-01');

    margin-bottom: $carbon--spacing-05;
    color: $text-02;
  }

  .#{$prefix}--label-description--disabled {
    color: $disabled-02;
  }

  // For backwards compatibility
  .#{$prefix}--file-btn ~ .#{$prefix}--file-container {
    margin-top: $carbon--spacing-06;
  }

  .#{$prefix}--btn ~ .#{$prefix}--file-container {
    margin-top: $carbon--spacing-05;
  }

  .#{$prefix}--file .#{$prefix}--file-container,
  .#{$prefix}--file ~ .#{$prefix}--file-container {
    margin-top: $carbon--spacing-03;
  }

  .#{$prefix}--file__selected-file {
    display: grid;
    max-width: to-rem(320px);
    min-height: $carbon--spacing-09;
    align-items: center;
    margin-bottom: $carbon--spacing-03;
    background-color: $field-01;
    gap: to-rem(12px) $carbon--spacing-05;
    grid-auto-rows: auto;
    grid-template-columns: 1fr auto;
    word-break: break-word;

    &:last-child {
      margin-bottom: 0;
    }

    .#{$prefix}--form-requirement {
      display: block;
      max-height: none;
      margin: 0;
      grid-column: 1 / -1;
    }

    .#{$prefix}--inline-loading__animation .#{$prefix}--loading {
      // Vanilla markup has `.bx--inline-loading__animation` which is used for `margin-right` adjustment
      margin-right: 0;
    }

    .#{$prefix}--file-filename {
      @include type-style('body-short-01');

      overflow: hidden;
      margin-left: $carbon--spacing-05;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
  }

  // V11: Remove --field
  .#{$prefix}--file__selected-file--field,
  .#{$prefix}--file__selected-file--md {
    min-height: to-rem(40px);
    gap: $carbon--spacing-03 $carbon--spacing-05;
  }

  .#{$prefix}--file__selected-file--sm {
    min-height: to-rem(32px);
    gap: $carbon--spacing-02 $carbon--spacing-05;
  }

  // TODO: deprecate this block
  .#{$prefix}--file__selected-file--invalid__wrapper {
    @include focus-outline('invalid');

    max-width: to-rem(320px);
    margin-bottom: $carbon--spacing-03;
    background-color: $field-01;
    outline-width: 1px;
  }

  .#{$prefix}--file__selected-file--invalid {
    @include focus-outline('invalid');

    padding: to-rem(12px) 0;
  }

  .#{$prefix}--file__selected-file--invalid.#{$prefix}--file__selected-file--sm {
    padding: $carbon--spacing-02 0;
  }

  // V11: Remove --field
  .#{$prefix}--file__selected-file--invalid.#{$prefix}--file__selected-file--field,
  .#{$prefix}--file__selected-file--invalid.#{$prefix}--file__selected-file--md {
    padding: $carbon--spacing-03 0;
  }

  .#{$prefix}--file__selected-file--invalid .#{$prefix}--form-requirement {
    padding-top: $carbon--spacing-05;
    border-top: 1px solid $ui-03;
  }

  .#{$prefix}--file__selected-file--invalid.#{$prefix}--file__selected-file--sm
    .#{$prefix}--form-requirement {
    padding-top: to-rem(7px);
  }

  // V11: Remove --field
  .#{$prefix}--file__selected-file--invalid.#{$prefix}--file__selected-file--field
    .#{$prefix}--form-requirement,
  .#{$prefix}--file__selected-file--invalid.#{$prefix}--file__selected-file--md
    .#{$prefix}--form-requirement {
    padding-top: to-rem(11px);
  }

  .#{$prefix}--file__selected-file--invalid
    .#{$prefix}--form-requirement__title,
  .#{$prefix}--file__selected-file--invalid
    .#{$prefix}--form-requirement__supplement {
    @include type-style('label-01');

    padding: 0 $carbon--spacing-05;
  }

  .#{$prefix}--file__selected-file--invalid
    .#{$prefix}--form-requirement__title {
    color: $text-error;
  }

  .#{$prefix}--file__selected-file--invalid
    .#{$prefix}--form-requirement__supplement {
    color: $text-01;
  }

  // TODO: deprecate
  .#{$prefix}--file__selected-file--invalid + .#{$prefix}--form-requirement {
    @include type-style('caption-01');

    display: block;
    overflow: visible;
    max-height: to-rem(200px);
    padding: $carbon--spacing-03 $carbon--spacing-05;
    color: $text-error;
    font-weight: 400;
  }

  .#{$prefix}--file__selected-file--invalid
    + .#{$prefix}--form-requirement
    .#{$prefix}--form-requirement__supplement {
    padding-bottom: $carbon--spacing-03;
    color: $text-01;
  }

  .#{$prefix}--file__state-container {
    display: flex;
    min-width: 1.5rem;
    align-items: center;
    justify-content: center;
    padding-right: $carbon--spacing-05;

    .#{$prefix}--loading__svg {
      stroke: $ui-05;
    }
  }

  .#{$prefix}--file__state-container .#{$prefix}--file-complete {
    fill: $interactive-04;

    &:focus {
      @include focus-outline('border');
    }

    // for checkmark contrast
    [data-icon-path='inner-path'] {
      fill: $icon-03;
      opacity: 1;
    }
  }

  .#{$prefix}--file__state-container .#{$prefix}--file-invalid {
    width: $carbon--spacing-05;
    height: $carbon--spacing-05;
    fill: $support-01;
  }

  .#{$prefix}--file__state-container .#{$prefix}--file-close {
    display: flex;
    width: $carbon--spacing-06;
    height: $carbon--spacing-06;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: none;
    background-color: transparent;
    cursor: pointer;
    fill: $icon-01;

    &:focus {
      @include focus-outline('outline');
    }
  }

  .#{$prefix}--file__state-container .#{$prefix}--file-close svg path {
    fill: $icon-01;
  }

  .#{$prefix}--file__state-container .#{$prefix}--inline-loading__animation {
    margin-right: -$carbon--spacing-03;
  }

  .#{$prefix}--file__drop-container {
    @include button-reset;
    @include type-style('body-short-01');

    display: flex;
    overflow: hidden;
    height: to-rem(96px);
    align-items: flex-start;
    justify-content: space-between;
    padding: $carbon--spacing-05;
    border: 1px dashed $ui-04;
  }

  .#{$prefix}--file__drop-container--drag-over {
    background: none;
    outline: 2px solid $interactive-03;
    outline-offset: -2px;
  }

  // Windows HCM fix
  /* stylelint-disable */
  .#{$prefix}--file__selected-file {
    @include high-contrast-mode('outline');
  }

  .#{$prefix}--file__state-container .#{$prefix}--file-close svg path {
    @include high-contrast-mode('icon-fill');
  }
  /* stylelint-enable */
}

@include exports('file-uploader') {
  @include file-uploader;
}
