import { useBreakpoints, useWindowSize } from '@vueuse/core';
import { computed } from 'vue';

// 断点定义
export const breakpoints = {
  xs: 0, // 手机竖屏 < 640px
  sm: 640, // 手机横屏 ≥ 640px
  md: 768, // 平板 ≥ 768px
  lg: 1024, // 小桌面 ≥ 1024px
  xl: 1280, // 桌面 ≥ 1280px
  xxl: 1536, // 大桌面 ≥ 1536px
};

export function useResponsive() {
  const bp = useBreakpoints(breakpoints);

  // 设备类型判断
  const isMobile = bp.smaller('md'); // < 768px
  const isTablet = bp.between('md', 'lg'); // 768px - 1024px
  const isDesktop = bp.greaterOrEqual('lg'); // ≥ 1024px

  // 精确断点
  const isXs = bp.smaller('sm'); // < 640px
  const isSm = bp.between('sm', 'md'); // 640px - 768px
  const isMd = bp.between('md', 'lg'); // 768px - 1024px
  const isLg = bp.between('lg', 'xl'); // 1024px - 1280px
  const isXl = bp.between('xl', 'xxl'); // 1280px - 1536px
  const isXxl = bp.greater('xxl'); // > 1536px

  // 监听窗口变化
  const { width, height } = useWindowSize();

  // 方向检测
  const isPortrait = computed(() => height.value > width.value);
  const isLandscape = computed(() => width.value > height.value);

  // 当前断点名称
  const currentBreakpoint = computed(() => {
    if (isXs.value) return 'xs';
    if (isSm.value) return 'sm';
    if (isMd.value) return 'md';
    if (isLg.value) return 'lg';
    if (isXl.value) return 'xl';
    return 'xxl';
  });

  return {
    // 设备类型
    isMobile,
    isTablet,
    isDesktop,

    // 精确断点
    isXs,
    isSm,
    isMd,
    isLg,
    isXl,
    isXxl,

    // 尺寸
    width,
    height,

    // 方向
    isPortrait,
    isLandscape,

    // 当前断点名称
    currentBreakpoint,
  };
}
