@use "sass:list";
@use "functions" as _functions;
@use "variables" as _variables;
@use "breakpoints" as _bp;

// --------------------------------------------------------------------------
//  Mixins - Grid - internal used to generate utility classes
//  Author : Ian Reid Langevin https://www.reidlangevin.com
// --------------------------------------------------------------------------

// Mixin for Gap
@mixin sailor-grid-gap($utility, $class-prefix, $property) {
   @each $breakpoint in map-keys(_variables.$s-breakpoints) {
      $prefix: _functions.breakpoint-prefix($breakpoint, _variables.$s-breakpoints);

      @each $name, $percentage in $utility {
         @include _bp.media-up($breakpoint) {
            .#{$prefix}#{$class-prefix}-#{$name} {
               #{$property}: calc(var(--spacing) * #{$percentage});
            }
         }
      }
   }
}

// Mixin for Grid classes and order
@mixin sailor-grid($utility, $class-prefix, $property) {
   @each $breakpoint in map-keys(_variables.$s-breakpoints) {
      $prefix: _functions.breakpoint-prefix($breakpoint, _variables.$s-breakpoints);

      @include _bp.media-up($breakpoint) {
         @for $i from 0 through _variables.$s-grid-cols-number {
            // create a 0 item to output the full property
            @if $i == 0 and ($property == "grid-column" or $property == "grid-row") {
               .#{$prefix}#{$class-prefix}-full {
                  #{$property}: 1 / -1;
               }

               // for 1 to s-grid-cols-number - output classes
            } @else if $i > 0 {
               .#{$prefix}#{$class-prefix}-#{$i} {
                  @if $property == "grid-template-columns" or $property == "grid-template-rows" {
                     display: grid;
                     #{$property}: repeat(#{$i}, minmax(0, #{$i}fr));
                  } @else if $property == "grid-column-start" or $property == "order" {
                     #{$property}: #{$i};
                  } @else if $property == "grid-column" or $property == "grid-row" {
                     #{$property}: span list.slash($i, span) #{$i};
                  }
               }
            }
         }
      }
   }
}

// --------------------------------------------------------------------------
// Classes
// --------------------------------------------------------------------------

@if _variables.$s-spacing-fractions and _variables.$s-spacing-values {
   @include sailor-grid-gap(_variables.$s-spacing-fractions, "gap", "gap");
   @include sailor-grid-gap(_variables.$s-spacing-fractions, "gap-col", "column-gap");
   @include sailor-grid-gap(_variables.$s-spacing-fractions, "gap-row", "row-gap");
}

@if _variables.$s-grid-cols-number {
   @include sailor-grid(_variables.$s-grid-cols-number, "grid-col", "grid-template-columns");
   @include sailor-grid(_variables.$s-grid-cols-number, "col-start", "grid-column-start");
   @include sailor-grid(_variables.$s-grid-cols-number, "col-span", "grid-column");
   @include sailor-grid(_variables.$s-grid-cols-number, "order", "order");
}

@if _variables.$s-grid-rows-number {
   @include sailor-grid(_variables.$s-grid-rows-number, "grid-row", "grid-template-rows");
   @include sailor-grid(_variables.$s-grid-rows-number, "row-span", "grid-row");
}
