// Tools :: Colours

@function fabric-color($key: 'primary') {
  @if map-has-key($fabric-colors, $key) {
    @return map-get($fabric-colors, $key);
  }
  @error "Invalid color name: `#{$key}`.";
}

$fabric-color-dark: fabric-color(medium-grey);
$fabric-color-light: fabric-color('white');

@mixin fabric-contrast($n) {
  $color-brightness: round(
    (red($n) * 299) + (green($n) * 587) + (blue($n) * 114) / 1000
  );
  $light-color: round(
    (red(#ffffff) * 299) + (green(#ffffff) * 587) + (blue(#ffffff) * 114) / 1000
  );

  @if abs($color-brightness) < ($light-color/2) {
    color: $fabric-color-light;
  } @else {
    color: $fabric-color-dark;
  }
}

@function fabric-get-tint($fabric-value, $tone-key) {
  @return fabric-tint($fabric-value, $tone-key);
}
@function fabric-get-shade($fabric-value, $tone-key) {
  @return fabric-shade($fabric-value, $tone-key);
}

@function fabric-tint($color, $percentage) {
  @return mix(white, $color, $percentage);
}

@function fabric-shade($color, $percentage) {
  @return mix(black, $color, $percentage);
}

@function fabric-luminance($color) {
  $red: nth($fabric-linear-channel-values, red($color) + 1);
  $green: nth($fabric-linear-channel-values, green($color) + 1);
  $blue: nth($fabric-linear-channel-values, blue($color) + 1);

  @return 0.2126 * $red + 0.7152 * $green + 0.0722 * $blue;
}

@function fabric-contrast($back, $front) {
  $backLum: fabric-luminance($back) + 0.05;
  $foreLum: fabric-luminance($front) + 0.25;

  @return max($backLum, $foreLum) / min($backLum, $foreLum);
}

@function fabric-choose-contrast-color($color) {
  $lightContrast: fabric-contrast($color, $fabric-color-light);
  $darkContrast: fabric-contrast($color, $fabric-color-dark);

  @if ($lightContrast > $darkContrast) {
    @return $fabric-color-light;
  } @else {
    @return $fabric-color-dark;
  }
}
