// ============================================================================================= //
//                                           FUNCTIONS                                           //
// ============================================================================================= //

@use "sass:list";
@use "sass:math";
@use "sass:meta";
@use "@sass-collective/strip-unit";
@use "./variables";

///
/// @example - scss
///   .foo {
///     font-size: rem.convert(16px);
///   }
///
/// @example - css
///   .foo {
///     font-size: 1rem;
///   }
///
/// @example - scss
///   .foo {
///     margin: rem.convert(20px 30px);
///   }
///
/// @example - css
///   .foo {
///     margin: 1.25rem 1.875rem;
///   }
///
/// @example - scss
///   .foo {
///     border: rem.convert(1px solid darkcyan);
///   }
///
/// @example - css
///   .foo {
///     border: 0.0625rem solid darkcyan;
///   }
///
/// @example - scss
///   .foo {
///     box-shadow: rem.convert(0 0 10px 5px rgba(darkcyan, 0.75), inset 0 0 10px 5px rgba(darkcyan, 0.75));
///   }
///
/// @example - css
///   .foo {
///     box-shadow: 0 0 0.625rem 0.3125rem rgba(0, 139, 139, 0.75), inset 0 0 0.625rem 0.3125rem rgba(0, 139, 139, 0.75);
///   }
///
/// @see {function} strip-unit.strip
///
@function convert($values...) {
    $result: ();
    $baseline: strip-unit.strip(variables.$baseline);
    $separator: list.separator($values);

    @each $value in $values {
        @if meta.type-of($value) == "number" and not math.is-unitless($value) and math.unit($value) != "px" {
            @error "Invalid unit on value `#{$value}`. Choose value with `px` unit instead or without unit.";
        } @else if meta.type-of($value) == "number" and not math.is-unitless($value) {
            $value: strip-unit.strip($value);
        }

        @if meta.type-of($value) == "number" and $value != 0 {
            $result: list.append($result, math.div($value, $baseline) * 1rem);
        } @else if meta.type-of($value) == "list" {
            $result: list.append($result, convert($value...), $separator);
        } @else {
            $result: list.append($result, $value);
        }
    }

    @return $result;
}

///
/// @see {function} strip-unit.strip
///
@function baseline($percentage: 100%) {
    @return math.div($percentage, 16) * strip-unit.strip(variables.$baseline);
}
