// Default border for card effect
// @type List
$paper-card-border: 1px solid #eee !default;
$paper-default-color: black !default;


// Clamp `$value` between `$min` and `$max`
// @param {Number} $value
// @param {Number} $min
// @param {Number} $max
// @return {Number}
@function clamp-card($value, $min, $max) {
  @return if($value > $max, $max, if($value < $min, $min, $value));
}

//Return a paper bottom-shadow
//@param {Number} $level - depth level
//@return {List}
@function paper-shadow-bottom($level, $color) {
  $primary-offset: nth(2 8 12 16 27, $level) * 1px;
  $blur: nth(5 17 15 28 24, $level) * 1px;
  $color: rgba($color, nth(.26 .20 .24 .22 .20, $level));

  @return 0 $primary-offset $blur $color;
}


//Return a paper top-shadow
//@param {Number} $level - depth level
// @return {List}

@function paper-shadow-top($level, $color) {
  $primary-offset: nth(2 6 17 25 40, $level) * 1px;
  $blur: nth(10 20 50 55 77, $level) * 1px;
  $color: rgba($color, nth(.16 .19 .19 .21 .22, $level));

  @return 0 $primary-offset $blur $color;
}


// Define a paper-like shadow

//@param {Number} $level (0) - depth level

//@requires {function} clamp-card
//@requires {function} paper-shadow-top
//@requires {function} paper-shadow-bottom

@mixin paper-shadow($level: 0, $color: null) {
  @if $level != 0 {

    $top-color: $paper-default-color;
    $bottom-color: $paper-default-color;

    @if type_of($color) == 'list' {
      $top-color: nth($color, 1);
      $bottom-color: nth($color, 2);
    }

    $level: clamp-card($level, 1, 5);
    box-shadow: paper-shadow-top($level, $top-color), paper-shadow-bottom($level, $bottom-color);
  }
}


//Define a paper border
//@param {List} $sides (())
//@requires {variable} $paper-card-border
@mixin paper-border($sides, $border) {

  @if length($sides) > 0 and length($sides) < 4 {
    @each $side in $sides {
      @if index('top' 'right' 'bottom' 'left', $side) {
        border-#{$side}: $border;
      }
    }
  } @else {
    border: $border;
  }
}


//Create a card effect
//@param {Number} $level - depth level
//@param {List} $sides - border sides

@mixin card($level: 0, $border: $paper-card-border, $color: null, $sides: ()) {

  @if ($color == null) {
    @include paper-shadow($level);
  } @else {
    @include paper-shadow($level, $color);
  }

  @if($border == null ) {
    $border: $paper-card-border;
  }

  @include paper-border($sides, $border);
}

//Size an element
//@param {Number} $width
//@param {Number} $height ($width)
@mixin size($width, $height: $width) {
  width: $width;
  height: $height;
}

