////
///
/// Pulse Animations Mixin Module
/// ===========================================================================
///
/// Provides SCSS mixins for creating pulse animations that rhythmically scale
/// elements. Includes standard pulse, slow/fast variations, and color pulse
/// for versatile visual feedback.
///
/// @group Animations
/// @author Scape Agency
/// @link https://move.gl
/// @since 0.1.0 initial release
/// @access public
///
////


// ============================================================================
// Use
// ============================================================================

@use "../../dev" as *;
@use "../../variables" as *;
@use "../keyframes" as *;
@use "base" as *;


// ============================================================================
// Mixins
// ============================================================================

///
/// Pulse Animation
/// ---------------------------------------------------------------------------
/// Creates a pulsing animation where the element scales between minimum
/// and maximum values.
///
/// @name animate_pulse
/// @param {Number} $scale_min [1] - Minimum scale value
/// @param {Number} $scale_max [1.1] - Maximum scale value
/// @param {Time} $duration [$animate_base_duration] - Animation duration
/// @param {String} $timing_function [linear] - Timing function
/// @param {Number|String} $iteration_count [$animate_base_iteration_count] - Iterations
///
/// @example scss - Basic usage
///   .notification {
///     @include animate_pulse;
///   }
///
@mixin animate_pulse(
    $scale_min: 1,
    $scale_max: $animate_scale_pulse,
    $duration: $animate_base_duration,
    $timing_function: linear,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_pulse,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_pulse($scale_min, $scale_max);
}


///
/// Slow Pulse Animation
/// ---------------------------------------------------------------------------
/// Creates a slower, more subtle pulse for gentle attention-grabbing.
///
/// @name animate_pulse_slow
/// @param {Number} $scale_min [0.95] - Minimum scale value
/// @param {Number} $scale_max [1.05] - Maximum scale value
/// @param {Time} $duration [$animate_base_duration_slow] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count [$animate_base_iteration_count] - Iterations
///
@mixin animate_pulse_slow(
    $scale_min: 0.95,
    $scale_max: 1.05,
    $duration: $animate_base_duration_slow,
    $timing_function: $animate_base_timing_function,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_pulse_slow,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_pulse_slow($scale_min, $scale_max);
}


///
/// Rapid Pulse Animation
/// ---------------------------------------------------------------------------
/// Creates a fast, pronounced pulse for urgent attention-grabbing.
///
/// @name animate_pulse_fast
/// @param {Number} $scale_min [0.9] - Minimum scale value
/// @param {Number} $scale_max [1.2] - Maximum scale value
/// @param {Time} $duration [$animate_base_duration_fast] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count [$animate_base_iteration_count] - Iterations
///
@mixin animate_pulse_fast(
    $scale_min: 0.9,
    $scale_max: 1.2,
    $duration: $animate_base_duration_fast,
    $timing_function: $animate_base_timing_function,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_pulse_fast,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_pulse_fast($scale_min, $scale_max);
}


///
/// Color Pulse Animation
/// ---------------------------------------------------------------------------
/// Creates a pulse that transitions the background color between two values.
///
/// @name animate_pulse_color
/// @param {Color} $color_start [$animate_base_color_start] - Starting color
/// @param {Color} $color_end [$animate_base_color_end] - Ending color
/// @param {Time} $duration [$animate_base_duration] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count [$animate_base_iteration_count] - Iterations
///
/// @example scss - Usage
///   .alert {
///     @include animate_pulse_color(#fff, #ff0000);
///   }
///
@mixin animate_pulse_color(
    $color_start: $animate_base_color_start,
    $color_end: $animate_base_color_end,
    $duration: $animate_base_duration,
    $timing_function: $animate_base_timing_function,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_pulse_color,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_pulse_color($color_start, $color_end);
}


///
/// Pulse Ring Animation
/// ---------------------------------------------------------------------------
/// Creates an expanding ring effect using box-shadow.
///
/// @name animate_pulse_ring
/// @param {Color} $ring_color [rgba(0, 0, 0, 0.3)] - Ring color
/// @param {Length} $ring_size [20px] - Maximum ring expansion
/// @param {Time} $duration [$animate_base_duration] - Animation duration
/// @param {String} $timing_function [ease-out] - Timing function
/// @param {Number|String} $iteration_count [$animate_base_iteration_count] - Iterations
///
@mixin animate_pulse_ring(
    $ring_color: rgba(0, 0, 0, 0.3),
    $ring_size: 20px,
    $duration: $animate_base_duration,
    $timing_function: ease-out,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_pulse_ring,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_pulse_ring($ring_color, $ring_size);
}


///
/// Pulse Glow Animation
/// ---------------------------------------------------------------------------
/// Creates a glowing pulse effect using box-shadow.
///
/// @name animate_pulse_glow
/// @param {Color} $glow_color [rgba(255, 255, 255, 0.5)] - Glow color
/// @param {Length} $glow_size [10px] - Maximum glow size
/// @param {Time} $duration [$animate_base_duration] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count [$animate_base_iteration_count] - Iterations
///
@mixin animate_pulse_glow(
    $glow_color: rgba(255, 255, 255, 0.5),
    $glow_size: 10px,
    $duration: $animate_base_duration,
    $timing_function: $animate_base_timing_function,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_pulse_glow,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_pulse_glow($glow_color, $glow_size);
}


///
/// Pulse Fade Animation
/// ---------------------------------------------------------------------------
/// Creates a pulse combined with fading opacity.
///
/// @name animate_pulse_fade
/// @param {Number} $scale_min [1] - Minimum scale
/// @param {Number} $scale_max [1.2] - Maximum scale
/// @param {Number} $opacity_min [0.5] - Minimum opacity
/// @param {Time} $duration [$animate_base_duration] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count [$animate_base_iteration_count] - Iterations
///
@mixin animate_pulse_fade(
    $scale_min: 1,
    $scale_max: 1.2,
    $opacity_min: 0.5,
    $duration: $animate_base_duration,
    $timing_function: $animate_base_timing_function,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_pulse_fade,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_pulse_fade($scale_min, $scale_max, $opacity_min);
}


///
/// Double Pulse Animation
/// ---------------------------------------------------------------------------
/// Creates a two-beat pulse pattern within one cycle.
///
/// @name animate_pulse_double
/// @param {Number} $scale_min [1] - Minimum scale
/// @param {Number} $scale_max [1.15] - Maximum scale
/// @param {Time} $duration [$animate_base_duration] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count [$animate_base_iteration_count] - Iterations
///
@mixin animate_pulse_double(
    $scale_min: 1,
    $scale_max: 1.15,
    $duration: $animate_base_duration,
    $timing_function: $animate_base_timing_function,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_pulse_double,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_pulse_double($scale_min, $scale_max);
}
