@use "sass:color";
@use "sass:math";
@use "./rgb";

// https://en.wikipedia.org/wiki/HSL_and_HSV

@function rgb-to-hsb($baseColor) {
  $r-rgb: rgb.red($baseColor);
  $g-rgb: rgb.green($baseColor);
  $b-rgb: rgb.blue($baseColor);
  $max: math.max($r-rgb, $g-rgb, $b-rgb);
  $min: math.min($r-rgb, $g-rgb, $b-rgb);

  $h-hsb: 0;
  @if $max == $min {
    $h-hsb: 0;
  } @else if $max == $r-rgb {
    $h-hsb: 60 * math.div($g-rgb - $b-rgb, $max - $min);
  } @else if $max == $g-rgb {
    $h-hsb: 60 * math.div($b-rgb - $r-rgb, $max - $min) + 120;
  } @else if $max == $b-rgb {
    $h-hsb: 60 * math.div($r-rgb - $g-rgb, $max - $min) + 240;
  }

  //$h-hsb: if($h-hsb < 0, $h-hsb + 360, $h-hsb);
  @if $h-hsb < 0 {
    $h-hsb: $h-hsb + 360;
  }

  //$s-hsb: if($max == 0, 0, math.div($max - $min, $max) * 100);
  $s-hsb: 0;
  @if $max != 0 {
    $s-hsb: math.div($max - $min, $max) * 100;
  }

  $b-hsb: math.div($max, 255) * 100;

  @return $h-hsb, $s-hsb, $b-hsb;
}

@function hsb-to-rgb($h-hsb, $s-hsb, $b-hsb) {
  $c: math.div($b-hsb, 100) * math.div($s-hsb, 100);
  $x: $c * (1 - math.abs(math.div($h-hsb, 60) % 2 - 1));
  $m: math.div($b-hsb, 100) - $c;

  $r-rgb: 0;
  $g-rgb: 0;
  $b-rgb: 0;

  @if 0 <= $h-hsb and $h-hsb <= 60 {
    $r-rgb: $c;
    $g-rgb: $x;
    $b-rgb: 0;
  } @else if 60 < $h-hsb and $h-hsb <= 120 {
    $r-rgb: $x;
    $g-rgb: $c;
    $b-rgb: 0;
  } @else if 120 < $h-hsb and $h-hsb <= 180 {
    $r-rgb: 0;
    $g-rgb: $c;
    $b-rgb: $x;
  } @else if 180 < $h-hsb and $h-hsb <= 240 {
    $r-rgb: 0;
    $g-rgb: $x;
    $b-rgb: $c;
  } @else if 240 < $h-hsb and $h-hsb <= 300 {
    $r-rgb: $x;
    $g-rgb: 0;
    $b-rgb: $c;
  } @else if 300 < $h-hsb and $h-hsb <= 360 {
    $r-rgb: $c;
    $g-rgb: 0;
    $b-rgb: $x;
  }

  @return rgb(($r-rgb + $m) * 255, ($g-rgb + $m) * 255, ($b-rgb + $m) * 255);
}

//@function hsb-to-rgb($h-hsb, $s-hsb, $b-hsb) {
//  $max: $b-hsb * 255 / 100;
//  $min: $max - (($s-hsb / 100) * $max);
//  $r-rgb: 0;
//  $g-rgb: 0;
//  $b-rgb: 0;
//
//  @if 0 <= $h-hsb and $h-hsb <= 60 {
//    $r-rgb: $max;
//    $g-rgb: ($h-hsb / 60) * ($max - $min) + $min;
//    $b-rgb: $min;
//  } @else if 61 <= $h-hsb and $h-hsb <= 120 {
//    $r-rgb: ((120 - $h-hsb) / 60) * ($max - $min) + $min;
//    $g-rgb: $max;
//    $b-rgb: $min;
//  } @else if 121 <= $h-hsb and $h-hsb <= 180 {
//    $r-rgb: $min;
//    $g-rgb: $max;
//    $b-rgb: (($h-hsb - 120) / 60) * ($max - $min) + $min;
//  } @else if 181 <= $h-hsb and $h-hsb <= 240 {
//    $r-rgb: $min;
//    $g-rgb: ((240 - $h-hsb) / 60) * ($max - $min) + $min;
//    $b-rgb: $max;
//  } @else if 241 <= $h-hsb and $h-hsb <= 300 {
//    $r-rgb: (($h-hsb - 240) / 60) * ($max - $min) + $min;
//    $g-rgb: $min;
//    $b-rgb: $max;
//  } @else if 301 <= $h-hsb and $h-hsb <= 360 {
//    $r-rgb: $max;
//    $g-rgb: $min;
//    $b-rgb: ((360 - $h-hsb) / 60) * ($max - $min) + $min;
//  }
//
//  @return rgb($r-rgb, $g-rgb, $b-rgb);
//}
