/// Returns the color value for a given color name and group.
///
/// @param {String} $hue - The color's hue.
/// @param {Number} $range - The darkness/lightness of the color. Defaults to base. The higher the number, the darker the color.
/// @return {Color} The color value.

@function s-color($hue, $range: 400) {
  $fetched-color: map-get(map-get($s-color-palette-data, $hue), $range);

  @if map-has-key($s-color-palette-data, $fetched-color) {
    $fetched-color: map-get(map-get($s-color-palette-data, $fetched-color), $range);
  }

  @if type-of($fetched-color) == color {
    @return $fetched-color;
  } @else if $fetched-color == null {
    $fetched-based-color: map-get(map-get($s-color-palette-data, $hue), 400);

    @if $range <= 100 {
      $fetched-color: lighten($fetched-based-color, 30%);
      @return $fetched-color;
    } @else if $range == 200 {
      $fetched-color: lighten($fetched-based-color, 20%);
      @return $fetched-color;
    } @else if $range == 300 {
      $fetched-color: lighten($fetched-based-color, 10%);
      @return $fetched-color;
    } @else if $range == 500 {
      $fetched-color: darken($fetched-based-color, 10%);
      @return $fetched-color;
    } @else if $range == 600 {
      $fetched-color: darken($fetched-based-color, 20%);
      @return $fetched-color;
    } @else if $range == 700 {
      $fetched-color: darken($fetched-based-color, 30%);
      @return $fetched-color;
    } @else {
      @error 'The `#{$range}` could not be found. Make sure you have specify a range between 000 and 700.';
    }
  } @else {
    @error 'Color `#{$hue} - #{$range}` not found. Available colors: #{$s-color-palette-data}';
  }
}


/// Returns a foreground color based on a given background-color in accordance with accessibility standars.
///
/// @param {Color} $background-color - The background color where the foreground will sit.
/// @param {Color} $dark-color - The dark color you wish to display if there is enough contrast.
/// @param {Color} $light-color - The light color you wish to display if there is enough contrast.
/// @return {Color} The HEX color of the foreground.
@function s-color-contrast($background-color, $dark-color: s-color(neutral, 700), $light-color: s-color(neutral, 000)) {
  @if $background-color == null {
    @return null;
  } @else {
    // Based on the algorithm recommended by W3: https://www.w3.org/TR/AERT/#color-contrast
    $yiq: (red($background-color) * 299 + green($background-color) * 587 + blue($background-color) * 114) / 1000;
    @return if($yiq >= 128, $dark-color, $light-color);
  }
}