// SCSS variables are information about icon's compiled state, stored under its original file name
//
// .icon-home {
//   width: $icon-home-width;
// }
//
// The large array-like variables contain all information about a single icon
// $icon-home: x y offset_x offset_y width height total_width total_height image_path;
//
// At the bottom of this section, we provide information about the spritesheet itself
// $spritesheet: width height image $spritesheet-sprites;
$icon1-name: 'icon1';
$icon1-x: 0px;
$icon1-y: 0px;
$icon1-offset-x: 0px;
$icon1-offset-y: 0px;
$icon1-width: 50px;
$icon1-height: 50px;
$icon1-total-width: 100px;
$icon1-total-height: 300px;
$icon1-image: 'sprite.png';
$icon1: (0px, 0px, 0px, 0px, 50px, 50px, 100px, 300px, 'sprite.png', 'icon1', );
$icon2-name: 'icon2';
$icon2-x: 0px;
$icon2-y: 50px;
$icon2-offset-x: 0px;
$icon2-offset-y: -50px;
$icon2-width: 50px;
$icon2-height: 50px;
$icon2-total-width: 100px;
$icon2-total-height: 300px;
$icon2-image: 'sprite.png';
$icon2: (0px, 50px, 0px, -50px, 50px, 50px, 100px, 300px, 'sprite.png', 'icon2', );
$icon3-name: 'icon3';
$icon3-x: 0px;
$icon3-y: 100px;
$icon3-offset-x: 0px;
$icon3-offset-y: -100px;
$icon3-width: 100px;
$icon3-height: 200px;
$icon3-total-width: 100px;
$icon3-total-height: 300px;
$icon3-image: 'sprite.png';
$icon3: (0px, 100px, 0px, -100px, 100px, 200px, 100px, 300px, 'sprite.png', 'icon3', );
$icon1-2x-name: 'icon1@2x';
$icon1-2x-x: 0px;
$icon1-2x-y: 0px;
$icon1-2x-offset-x: 0px;
$icon1-2x-offset-y: 0px;
$icon1-2x-width: 100px;
$icon1-2x-height: 100px;
$icon1-2x-total-width: 200px;
$icon1-2x-total-height: 600px;
$icon1-2x-image: 'sprite@2x.png';
$icon1-2x: (0px, 0px, 0px, 0px, 100px, 100px, 200px, 600px, 'sprite@2x.png', 'icon1@2x', );
$icon2-2x-name: 'icon2@2x';
$icon2-2x-x: 0px;
$icon2-2x-y: 100px;
$icon2-2x-offset-x: 0px;
$icon2-2x-offset-y: -100px;
$icon2-2x-width: 100px;
$icon2-2x-height: 100px;
$icon2-2x-total-width: 200px;
$icon2-2x-total-height: 600px;
$icon2-2x-image: 'sprite@2x.png';
$icon2-2x: (0px, 100px, 0px, -100px, 100px, 100px, 200px, 600px, 'sprite@2x.png', 'icon2@2x', );
$icon3-2x-name: 'icon3@2x';
$icon3-2x-x: 0px;
$icon3-2x-y: 200px;
$icon3-2x-offset-x: 0px;
$icon3-2x-offset-y: -200px;
$icon3-2x-width: 200px;
$icon3-2x-height: 400px;
$icon3-2x-total-width: 200px;
$icon3-2x-total-height: 600px;
$icon3-2x-image: 'sprite@2x.png';
$icon3-2x: (0px, 200px, 0px, -200px, 200px, 400px, 200px, 600px, 'sprite@2x.png', 'icon3@2x', );
$icons-width: 100px;
$icons-height: 300px;
$icons-image: 'sprite.png';
$icons-sprites: ($icon1, $icon2, $icon3, );
$icons: (100px, 300px, 'sprite.png', $icons-sprites, );
$retina-icons-width: 200px;
$retina-icons-height: 600px;
$retina-icons-image: 'sprite@2x.png';
$retina-icons-sprites: ($icon1-2x, $icon2-2x, $icon3-2x, );
$retina-icons: (200px, 600px, 'sprite@2x.png', $retina-icons-sprites, );

// These "retina group" variables are mappings for the naming and pairing of normal and retina sprites.
//
// The list formatted variables are intended for mixins like `retina-sprite` and `retina-sprites`.
$icon1-group-name: 'icon1';
$icon1-group: ('icon1', $icon1, $icon1-2x, );
$icon2-group-name: 'icon2';
$icon2-group: ('icon2', $icon2, $icon2-2x, );
$icon3-group-name: 'icon3';
$icon3-group: ('icon3', $icon3, $icon3-2x, );
$icon-groups: ($icon1-group, $icon2-group, $icon3-group, );

// The provided mixins are intended to be used with the array-like variables
//
// .icon-home {
//   @include sprite-width($icon-home);
// }
//
// .icon-email {
//   @include sprite($icon-email);
// }
//
// Example usage in HTML:
//
// `display: block` sprite:
// <div class="icon-home"></div>
//
// To change `display` (e.g. `display: inline-block;`), we suggest using a common CSS class:
//
// // CSS
// .icon {
//   display: inline-block;
// }
//
// // HTML
// <i class="icon icon-home"></i>
@mixin sprite-width($sprite) {
  width: nth($sprite, 5);
}

@mixin sprite-height($sprite) {
  height: nth($sprite, 6);
}

@mixin sprite-position($sprite) {
  $sprite-offset-x: nth($sprite, 3);
  $sprite-offset-y: nth($sprite, 4);
  background-position: $sprite-offset-x  $sprite-offset-y;
}

@mixin sprite-image($sprite) {
  $sprite-image: nth($sprite, 9);
  background-image: url(#{$sprite-image});
}

@mixin sprite($sprite) {
  @include sprite-image($sprite);
  @include sprite-position($sprite);
  @include sprite-width($sprite);
  @include sprite-height($sprite);
}

// The `retina-sprite` mixin sets up rules and a media query for a sprite/retina sprite.
//   It should be used with a "retina group" variable.
//
// The media query is from CSS Tricks: https://css-tricks.com/snippets/css/retina-display-media-query/
//
// $icon-home-group: ('icon-home', $icon-home, $icon-home-2x, );
//
// .icon-home {
//   @include retina-sprite($icon-home-group);
// }
@mixin sprite-background-size($sprite) {
  $sprite-total-width: nth($sprite, 7);
  $sprite-total-height: nth($sprite, 8);
  background-size: $sprite-total-width $sprite-total-height;
}

@mixin retina-sprite($retina-group) {
  $normal-sprite: nth($retina-group, 2);
  $retina-sprite: nth($retina-group, 3);
  @include sprite($normal-sprite);

  @media (-webkit-min-device-pixel-ratio: 2),
         (min-resolution: 192dpi) {
    @include sprite-image($retina-sprite);
    @include sprite-background-size($normal-sprite);
  }
}

// The `sprites` mixin generates identical output to the CSS template
//   but can be overridden inside of SCSS
//
// @include sprites($spritesheet-sprites);
@mixin sprites($sprites) {
  @each $sprite in $sprites {
    $sprite-name: nth($sprite, 10);
    .#{$sprite-name} {
      @include sprite($sprite);
    }
  }
}

// The `retina-sprites` mixin generates a CSS rule and media query for retina groups
//   This yields the same output as CSS retina template but can be overridden in SCSS
//
// @include retina-sprites($retina-groups);
@mixin retina-sprites($retina-groups) {
  @each $retina-group in $retina-groups {
    $sprite-name: nth($retina-group, 1);
    .#{$sprite-name} {
      @include retina-sprite($retina-group);
    }
  }
}
