@mixin hu-media-query($query) {
  @if (type-of($query) == map) {
    $expressions: (
      min-height: if(map-has-key($query, min-height), hu-get($query, min-height), if(map-has-key($query, min-h), hu-get($query, min-h), null)),
      max-height: if(map-has-key($query, max-height), hu-get($query, max-height), if(map-has-key($query, max-h), hu-get($query, max-h), null)),
      min-width: if(map-has-key($query, min-width), hu-get($query, min-width), if(map-has-key($query, min-w), hu-get($query, min-w), null)),
      max-width: if(map-has-key($query, max-width), hu-get($query, max-width), if(map-has-key($query, max-w), hu-get($query, max-w), null)),
      orientation: if(map-has-key($query, orientation), hu-get($query, orientation), null),
    );

    @if (map-has-key($query, other)) {
      $expressions: hu-append($expressions, hu-get($query, other));
    }

    $query: "";
    $valid-expression-index: 0;

    @each $expression-type, $expression-value in $expressions {
      @if ($expression-value) {
        @if ($valid-expression-index > 0) {
          $query: $query + " and ";
        }

        $query: $query + "(#{$expression-type}: #{$expression-value})";

        $valid-expression-index: $valid-expression-index + 1;
      }
    }

    @media #{unquote($query)} {
      @content;
    }
  }
  @else {
    @media (min-width: $query) {
      @content;
    }
  }
}
