////
/// include-media public exposed API
/// @author Eduardo Boucas
/// @access public
////


///
/// Generates a media query based on a list of conditions
///
/// @param {Arglist}   $conditions  - Media query conditions
///
/// @example scss - With a single set breakpoint
///  @include media('>phone') { }
///
/// @example scss - With two set breakpoints
///  @include media('>phone', '<=tablet') { }
///
/// @example scss - With custom values
///  @include media('>=358px', '<850px') { }
///
/// @example scss - With set breakpoints with custom values
///  @include media('>desktop', '<=1350px') { }
///
/// @example scss - With a static expression
///  @include media('retina2x') { }
///
/// @example scss - Mixing everything
///  @include media('>=350px', '<tablet', 'retina3x') { }
///
@mixin media($conditions...) {
  $is-list-mode: (length($conditions) == 1 and type-of(nth($conditions, 1)) == 'list');

  @if ($im-media-support and length($conditions) == 0) or
      (not $im-media-support and im-intercepts-static-breakpoint($conditions...) and not $is-list-mode) {
    @content;
  } @else if ($im-media-support and $is-list-mode) {
    // List mode with AND / OR conditions
    @media #{unquote(parse-media-query(resolve-feature-queries(nth($conditions, 1))))} {
      @content;
    }

  } @else if ($im-media-support and length($conditions) > 0) {
    // Legacy mode
    @media #{unquote(parse-media-query(parse-expression(nth($conditions, 1))))} {
      // Recursive call
      @include media(slice($conditions, 2)...) {
        @content;
      }
    }
  }
}
