@use 'sass:color';
@use 'sass:list';
@use '../../utils/color-helper' as helper;
@use '../../utils/functions';
@use '../../color-vars' as colors;
@use '../../variables' as vars;

@mixin truncate($no-wrap: true) {
  @if $no-wrap {
    white-space: nowrap;
  }
  overflow: hidden;
  text-overflow: ellipsis;
}

// Mixins to create text-color, background-color, border-color and hyperlink
@mixin decorate-color(
  $name,
  $color,
  $background: true,
  $border: true,
  $text: true,
  $text-bg: false,
  $hyperlink: false,
  $alias-name1: false,
  $alias-name2: false
) {
  $color-names: (primary secondary success danger warning info dark light);

  @if $background {
    @if $alias-name1 {
      .bg-#{$name},
      .bg-#{$alias-name1} {
        background-color: $color;
      }
    } @else if($alias-name1 and $alias-name2) {
      .bg-#{$name},
      .bg-#{$alias-name1},
      .bg-#{$alias-name2} {
        background-color: $color;
      }
    } @else {
      .bg-#{$name} {
        @if (list.index($color-names, $name)) {
          background-color: $color !important;
        } @else {
          background-color: $color;
        }
      }
    }
  }

  @if $border {
    @if $alias-name1 {
      .border-#{$name},
      .border-#{$alias-name1} {
        --#{vars.$prefix}border-color: #{$color};
      }
    } @else if($alias-name1 and $alias-name2) {
      .border-#{$name},
      .border-#{$alias-name1},
      .border-#{$alias-name2} {
        --#{vars.$prefix}border-color: #{$color};
      }
    } @else {
      .border-#{$name} {
        --#{vars.$prefix}border-color: #{$color};

        @if (list.index($color-names, $name)) {
          $red: functions.round(color.channel($color, 'red', $space: rgb));
          $green: functions.round(color.channel($color, 'green', $space: rgb));
          $blue: functions.round(color.channel($color, 'blue', $space: rgb));
          $red1: functions.fn-if(($red < 0), 0, $red);
          $green1: functions.fn-if(($green < 0), 0, $green);
          $blue1: functions.fn-if(($blue < 0), 0, $blue);

          --#{vars.$prefix-bs}#{$name}-rgb: #{$red1, $green1, $blue1};
        } @else {
          --#{vars.$prefix-bs}border-color: #{$color};
        }
      }
    }
  }

  @if $text {
    @if $alias-name1 {
      .text-#{$name},
      .text-#{$alias-name1} {
        color: $color;
      }
    } @else if($alias-name1 and $alias-name2) {
      .text-#{$name},
      .text-#{$alias-name1},
      .text-#{$alias-name2} {
        color: $color;
      }
    } @else {
      .text-#{$name} {
        @if (list.index($color-names, $name)) {
          color: $color !important;
        } @else {
          color: $color;
        }
      }
    }
  }

  @if $hyperlink {
    @if $alias-name1 {
      a.text-#{$name},
      a.text-#{$alias-name1} {
        &:hover,
        &:focus {
          color: helper.to-oklch(color.adjust($color, $lightness: -15%));
        }
      }
    } @else if($alias-name1 and $alias-name2) {
      a.text-#{$name},
      a.text-#{$alias-name1},
      a.text-#{$alias-name2} {
        &:hover,
        &:focus {
          color: helper.to-oklch(color.adjust($color, $lightness: -15%));
        }
      }
    } @else {
      a.text-#{$name} {
        &:hover,
        &:focus {
          color: helper.to-oklch(color.adjust($color, $lightness: -15%));
        }
      }
    }
  }

  @if $text-bg {
    $text-color: helper.set-color-contrast($color, colors.$neutral-darken-4, colors.$white, 70%);

    @if $alias-name1 {
      .text-bg-#{$name},
      .text-bg-#{$alias-name1} {
        color: $text-color;
        background-color: $color;
      }
    } @else if($alias-name1 and $alias-name2) {
      .text-bg-#{$name},
      .text-bg-#{$alias-name1},
      .text-bg-#{$alias-name2} {
        color: $text-color;
        background-color: $color;
      }
    } @else {
      .text-bg-#{$name} {
        @if (list.index($color-names, $name)) {
          color: $text-color !important;
          background-color: $color !important;
        } @else {
          color: $text-color;
          background-color: $color;
        }
      }
    }
  }
}
