@use 'sass:string';
@use 'sass:list';

//-------------------------------------------------------------------
// Color Helper Functions
//-------------------------------------------------------------------

// Return color from a list
//-------------------------------------------------------------------

@function get-color($list, $color) {
  @if map-has-key($list, $color) {
    @return map-get($list, $color);
  } @else {
    @warn error-message($color, $colors, 'tokens/_colors.scss');
    @return 'WARN: Invalid Color';
  }
}

// Retrun
//-------------------------------------------------------------------

@function color($color, $alpha: 1) {
  $color-token: $color;
  $color-value: $color;
  $token-list: $colors;

  @if contains($color-token, 'brand-') {
    $token-list: $brand;
    $color-token: string.slice($color-token, 7);
  }

  @if map-has-key($token-list, $color-token) {
    @if type-of(map-get($token-list, $color-token)) == map {
      $map: map-get($token-list, $color-token);
    } @else {
      @return get-color($token-list, $color-token);
    }
  }

  @if contains($color-token, '-') {
    $palette: string.slice($color-token, 1, string.index($color-token, '-') - 1);
    $palette-length: string.length($palette);
    $shade: string.slice($color-token, $palette-length + 2);

    @if map-has-key($token-list, $palette) {
      $map: map-get($token-list, $palette);
      $color-value: get-color($map, $shade);
    } @else if contains($shade, '-') {
      $palette-suffix: string.slice($shade, 1, string.index($shade, '-') - 1);
      $shade: string.slice($shade, string.index($shade, '-') + 1);
      $palette: #{#{$palette}-#{$palette-suffix}};

      @if map-has-key($token-list, $palette) {
        $map: map-get($token-list, $palette);
        $color-value: get-color($map, $shade);
      }
    }

    @if contains($color, 'brand-') {
      @return var(--brand-#{$palette}-#{$shade}, rgba($color-value, $alpha));
    }
    @return rgba($color-value, $alpha);
  }

  @warn error-message($color, $colors, 'tokens/_colors.scss');
  @return 'WARN: Invalid Color';
  @return null;
}
