/**
 * Requires
 */
@use "sass:math";
@use '../abstract/strip-unit' as *;
@use '../media';

/**
 * Fluid style basic setter
 * Creates a fluid font style between a min and max
 * @param {size[unit]} $min-vw - Min query width value
 * @param {size[unit]} $max-vw - Max query width value
 * @param {size[unit]} $min-font-size - Min font size
 * @param {size[unit]} $max-font-size - Max font size
 * @param {null|string} $base-query - Optional name for an @mixin mx-media(name), default: null
 * @param {boolean} $no-max - Do not define max query, default: null
 * @param {string} $error - Error message prefix
 * @output Adds the given font media queries in current scope, with an optional base query
 */
@mixin font-fluid-base($min-vw, $max-vw, $min-font-size, $max-font-size, $base-query: null, $no-max: false, $error: 'font-fluid-base::') {

  // Get initial units
  $u1: math.unit($min-vw);
  $u2: math.unit($max-vw);
  $u3: math.unit($min-font-size);
  $u4: math.unit($max-font-size);

  // If we have a valid unit setup
  @if $u1 == $u2 and $u1 == $u3 and $u1 == $u4 {
    & {
      @if $base-query {
        @include media.query($base-query) {
          font-size: $min-font-size;
        }
      } @else {
        font-size: $min-font-size;
      }
      @media screen and (min-width: $min-vw) {
        font-size: calc(#{$min-font-size} + #{strip-unit($max-font-size - $min-font-size)} * ((100vw - #{$min-vw}) / #{strip-unit($max-vw - $min-vw)}));
      }
      @if $no-max == false {
        @media screen and (min-width: $max-vw) {
          font-size: $max-font-size;
        }
      }
    }
  } @else {
    @error '#{$error}$min and $max unit types do not match';
  }
}
