//**********************************************************
// Mixins
//----------------------------------------------------------
//
//**********************************************************
@use "sass:map";
@use "sass:list";

@mixin setPlaceholderGutter($prop) {
    %#{$prop} {
        @include setPropsAdaptive((
                #{$prop}: $grid_gap
        ));

        &-half {
            @include setPropsAdaptive((
                    #{$prop}: $grid_gap_half
            ));
        }

        &-0 {
            #{$prop}: 0;
        }

        @each $side in $list_sides {
            &-#{$side} {
                @include setPropsAdaptive((
                        #{$prop}-#{$side}: $grid_gap
                ));

                &-half {
                    @include setPropsAdaptive((
                            #{$prop}-#{$side}: $grid_gap_half
                    ));
                }

                &-0 {
                    #{$prop}-#{$side}: 0;
                }
            }
        }
    }
}

//----------------------------------------------------------
// Array of breakpoints buffer:
//
// $list_breakpoints_buffer: [
//     (
//         selector: &,
//         breakpoint: 11,
//         props: (
//             padding-left: 1rem,
//             padding-right: 1rem
//         )
//     ),
//     ...
// ]
//----------------------------------------------------------
@mixin setPropsAdaptive($props) {
    @each $key, $value in $props {
        @if $value > 0 {
            #{$key}: $value;
        }
    }

    $buffer: (selector: #{&}, breakpoint: $grid_column);

    @each $key, $value in $props {
        @if $value > 0 {
            $buffer: map.merge($buffer, props, (#{$key}: $layout_rate * $value));
        } @else {
            $buffer: map.merge($buffer, props, (#{$key}: 0));
        }
    }

    $list_breakpoints_buffer: list.append($list_breakpoints_buffer, $buffer) !global;
}

@mixin pasteBuffer($breakpoint: $grid_column) {
    @each $buffer in $list_breakpoints_buffer {
        @if $breakpoint == map.get($buffer, breakpoint) {
            $selector: map.get($buffer, selector);

            #{$selector} {
                @each $key, $value in map.get($buffer, props) {
                    #{$key}: $value;
                }
            }
        }
    }
}

// Helpers

// Utilities

// Components

// Skins

// Layout
