// ============================================
// 榴莲认种管理后台 - SCSS Mixins
// ============================================

@use 'variables' as *;

// 过渡动画
@mixin transition-base {
  transition: all $duration-base $ease-in-out;
}

@mixin transition-fast {
  transition: all $duration-fast $ease-in-out;
}

@mixin transition-slow {
  transition: all $duration-slow $ease-in-out;
}

// 悬停抬起效果
@mixin hover-lift {
  transition: transform $duration-fast $ease-out, box-shadow $duration-fast $ease-out;
  &:hover {
    transform: translateY(-2px);
    box-shadow: $shadow-md;
  }
}

// Flexbox 布局
@mixin flex-center {
  display: flex;
  align-items: center;
  justify-content: center;
}

@mixin flex-between {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

@mixin flex-start {
  display: flex;
  align-items: center;
  justify-content: flex-start;
}

@mixin flex-end {
  display: flex;
  align-items: center;
  justify-content: flex-end;
}

@mixin flex-column {
  display: flex;
  flex-direction: column;
}

@mixin flex-column-center {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

// 文本溢出省略
@mixin text-ellipsis {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@mixin text-ellipsis-multiline($lines: 2) {
  display: -webkit-box;
  -webkit-line-clamp: $lines;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
}

// 滚动条样式
@mixin custom-scrollbar($width: 6px) {
  &::-webkit-scrollbar {
    width: $width;
    height: $width;
  }

  &::-webkit-scrollbar-track {
    background: transparent;
  }

  &::-webkit-scrollbar-thumb {
    background-color: $border-color;
    border-radius: $border-radius-pill;

    &:hover {
      background-color: $text-disabled;
    }
  }
}

// 卡片样式
@mixin card-base {
  background: $card-background;
  border-radius: $border-radius-base;
  box-shadow: $shadow-base;
}

// 按钮基础样式
@mixin button-base {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: $spacing-sm;
  padding: $padding-button;
  border: none;
  border-radius: $border-radius-base;
  font-family: $font-family-base;
  font-size: $font-size-base;
  font-weight: $font-weight-medium;
  cursor: pointer;
  @include transition-fast;

  &:disabled {
    cursor: not-allowed;
    opacity: 0.6;
  }
}

// 输入框基础样式
@mixin input-base {
  width: 100%;
  padding: $padding-input;
  border: 1px solid $border-color;
  border-radius: $border-radius-base;
  font-family: $font-family-base;
  font-size: $font-size-base;
  color: $text-primary;
  background: $card-background;
  @include transition-fast;

  &::placeholder {
    color: $text-disabled;
  }

  &:focus {
    outline: none;
    border-color: $primary-color;
    box-shadow: 0 0 0 3px rgba($primary-color, 0.1);
  }

  &:disabled {
    background: $background-color;
    cursor: not-allowed;
  }
}

// 绝对定位填充
@mixin absolute-fill {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

// 固定定位填充
@mixin fixed-fill {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

// 响应式断点
$breakpoints: (
  sm: 640px,
  md: 768px,
  lg: 1024px,
  xl: 1280px,
  2xl: 1536px
);

@mixin respond-to($breakpoint) {
  @if map-has-key($breakpoints, $breakpoint) {
    @media (min-width: map-get($breakpoints, $breakpoint)) {
      @content;
    }
  } @else {
    @warn "Unknown breakpoint: #{$breakpoint}";
  }
}

@mixin respond-below($breakpoint) {
  @if map-has-key($breakpoints, $breakpoint) {
    @media (max-width: map-get($breakpoints, $breakpoint) - 1px) {
      @content;
    }
  } @else {
    @warn "Unknown breakpoint: #{$breakpoint}";
  }
}

// 隐藏滚动条但保持滚动功能
@mixin hide-scrollbar {
  -ms-overflow-style: none;
  scrollbar-width: none;

  &::-webkit-scrollbar {
    display: none;
  }
}

// 可点击区域扩大
@mixin clickable-area($size: 8px) {
  position: relative;

  &::before {
    content: '';
    position: absolute;
    top: -$size;
    left: -$size;
    right: -$size;
    bottom: -$size;
  }
}

// 骨架屏动画
@mixin skeleton-loading {
  background: linear-gradient(
    90deg,
    $background-color 25%,
    lighten($background-color, 5%) 50%,
    $background-color 75%
  );
  background-size: 200% 100%;
  animation: skeleton-loading 1.5s infinite;

  @keyframes skeleton-loading {
    0% {
      background-position: 200% 0;
    }
    100% {
      background-position: -200% 0;
    }
  }
}

// 聚焦环
@mixin focus-ring {
  &:focus-visible {
    outline: 2px solid $primary-color;
    outline-offset: 2px;
  }
}
