@use '../easings/coordinates' as *;

/**
 * ALIAS FOR THE CSS cubic-bezier FUNCTION
 *
 * Use:
 * `transition-timing-function: bezier(.1, .02, 1, .7);`
 */
 @function bezier($args...) {
  @return #{'cubic-bezier(#{$args})'};
}

/**
 * REVERSE A cubic-bezier TIMING FUNCTION
 *
 * Use:
 * `transition-timing-function: reverse-bezier(.1, .02, 1, .7);`
 * `transition-timing-function: reverse-bezier($in-out-quad-value);`
 */
@function reverse-bezier($args...) {

  // Turn single argument into 4 arguments
  @if length($args) == 1 and length(nth($args, 1)) == 4 {
    $args: nth($args, 1);
  }

  $x1: nth($args, 1);
  $y1: nth($args, 2);
  $x2: nth($args, 3);
  $y2: nth($args, 4);

  @return #{'cubic-bezier(#{1 - $x2}, #{1 - $y2}, #{1 - $x1}, #{1 - $y1})'};
}

/**
 * ALIAS TO reverse-bezier
 */
@function r-bezier($args...) {
  @if length($args) == 1 and length(nth($args, 1)) == 4 {
    $args: nth($args, 1);
  }

  @return reverse-bezier($args);
}

/**
 * RETURNS VALUE(S) FOR A NAMED TIMING FUNCTION.
 */

 @function bezier-value($name, $coordinate) {
  @return map-get(map-get($easings-coordinates, $name), $coordinate);
}


@function reverse-bezier-value($name) {
  $x1: bezier-x1($name);
  $y1: bezier-y1($name);
  $x2: bezier-x2($name);
  $y2: bezier-y2($name);

  @return 1 - $x2, 1 - $y2, 1 - $x1, 1 - $y1;
}

@function bezier-x1($name) {
  @return bezier-value($name, 'x1');
}

@function bezier-y1($name) {
  @return bezier-value($name, 'y1');
}

@function bezier-x2($name) {
  @return bezier-value($name, 'x2');
}

@function bezier-y2($name) {
  @return bezier-value($name, 'y2');
}
