/**
  PaperCSS Mixins
*/

/**
  Assign a border style to a component selector.
  @param    integer
  @default  1
*/
@mixin border-style($style: 1) {
  @if $style==1 {
    border-bottom-left-radius: 15px 255px;
    border-bottom-right-radius: 225px 15px;
    border-top-left-radius: 255px 15px;
    border-top-right-radius: 15px 225px;
  }
  @if $style==2 {
    border-bottom-left-radius: 185px 25px;
    border-bottom-right-radius: 20px 205px;
    border-top-left-radius: 125px 25px;
    border-top-right-radius: 10px 205px;
  }
  @if $style==3 {
    border-bottom-left-radius: 225px 15px;
    border-bottom-right-radius: 15px 255px;
    border-top-left-radius: 15px 225px;
    border-top-right-radius: 255px 15px;
  }
  @if $style==4 {
    border-bottom-left-radius: 25px 115px;
    border-bottom-right-radius: 155px 25px;
    border-top-left-radius: 15px 225px;
    border-top-right-radius: 25px 150px;
  }
  @if $style==5 {
    border-bottom-left-radius: 20px 115px;
    border-bottom-right-radius: 15px 105px;
    border-top-left-radius: 250px 15px;
    border-top-right-radius: 25px 80px;
  }
  @if $style==6 {
    border-bottom-left-radius: 15px 225px;
    border-bottom-right-radius: 20px 205px;
    border-top-left-radius: 28px 125px;
    border-top-right-radius: 100px 30px;
  }
}

/**
  Mixin for setting responsive breakpoints
  @param string | integer
  @default null
*/
@mixin resp($max:null, $min:null) {
  @if $max == large or $max == lg { $max: $large-screen; }
  @if $max == medium or $max == md { $max: $medium-screen; }
  @if $max == small or $max == sm { $max: $small-screen; }
  @if $max == xsmall or $max == xs { $max: $xsmall-screen; }

  @if ($min != null and $max != null) { @media only screen and (max-width: $max) and (min-width: $min) { @content; } }
  @else if($max != null and $min == null) { @media only screen and (max-width: $max) { @content; } }
  @else if($min != null and $max == null) { @media only screen and (min-width: $min) { @content; } }
  @else { @error 'no matching size found';}
}

/**
  Useful helper mixins
*/
@mixin hr-after() {
  color: lighten($primary, 30%);
  content: '~~~';
  display: block;
  font-size: 1.5rem;
  position: relative;
  text-align: center;
}

@mixin center-all() {
  align-items: center;
  justify-content: center;
}

@mixin col-size($percent) {
  flex: 0 0 $percent;
  max-width: $percent;
}

@mixin li-bullet($char) {
  li::before {
    content: $char;
  }
}

/*
  Add transform: translate() with browser prefixes.
  Same syntax for translate() and translate3d()
  To get 3D add a $z value and set 'true'
  @param string | boolean
  @default 0 | false
*/
@mixin translate($x, $y, $z: 0, $transform3d: false) {
  @if $transform3d {
    transform: translate3d($x, $y, $z);
  } @else {
    transform: translate($x, $y);
  }
}

/*
  Add global transition styles to selector
  @param string
  @default all | 235ms | ease-in-out | 0
*/
@mixin transition($name:all, $duration:235ms, $animation:ease-in-out, $delay: 0s) {
  transition: $name $duration $animation $delay;
}

/**
  Set the shadow type for a component
  @param    string
  @default  regular
*/
@mixin shadow($type: regular) {
  @if $type == hover {
    @include translate(0, 2px, 0, true);
    box-shadow: $shadow-hover;
  } @else if $type == small {
    @include transition($animation: ease);
    box-shadow: $shadow-small;
  } @else if $type == regular {
    @include transition($animation: ease);
    box-shadow: $shadow-regular;
  } @else if $type == large {
    @include transition($animation: ease);
    box-shadow: $shadow-large;
  } @else {
    @error 'wrong $type. available types: small | regular | large | hover';
  }
}

//function for string replacement
@function str-replace($string, $search, $replace: '') {
  $index: str-index($string, $search);

  @if $index {
    @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
  }

  @return $string;
}

/**
  Sets a striped background on a component
  @param    string
*/
@mixin striped-background($base-color) {
  $color-dark: darken($base-color, 10%);
  background: repeating-linear-gradient(45deg, $base-color, $base-color 0.25rem, $color-dark 0.25rem, $color-dark 0.5rem);
}
