import React, { ReactNode, CSSProperties } from 'react';
/**
 * 滚动位置配置
 */
export interface ScrollPosition {
    /** 竖向滚动位置（像素） */
    scrollTop?: number;
    /** 横向滚动位置（像素） */
    scrollLeft?: number;
    /** 滚动行为 */
    behavior?: 'auto' | 'smooth';
}
/**
 * 滚动到元素配置
 */
export interface ScrollToElementConfig {
    /** 目标元素 ID */
    targetId: string;
    /** 对齐方式 */
    align?: 'start' | 'center' | 'end' | 'nearest';
    /** 滚动行为 */
    behavior?: 'auto' | 'smooth';
    /** 偏移量 */
    offset?: number;
}
/**
 * 滚动百分比配置
 */
export interface ScrollPercentage {
    /** 竖向滚动百分比 (0-100) */
    percentY?: number;
    /** 横向滚动百分比 (0-100) */
    percentX?: number;
    /** 滚动行为 */
    behavior?: 'auto' | 'smooth';
}
/**
 * 滚动按钮配置
 */
export interface ScrollActionsConfig {
    show?: boolean;
    /** 按钮类型 */
    type: "backTop" | "rArrows" | "lrArrows" | "tbArrows" | "custom";
    style?: CSSProperties;
    scrollDistance?: number;
    /** 按钮配置 根据type不同，配置不同 */
    config?: any;
}
/**
 * 滚动事件数据
 */
export interface ScrollEventData {
    /** 当前滚动位置 */
    scrollTop: number;
    scrollLeft: number;
    /** 滚动百分比 */
    percentY: number;
    percentX: number;
    /** 可滚动高度/宽度 */
    scrollHeight: number;
    scrollWidth: number;
    /** 容器尺寸 */
    clientHeight: number;
    clientWidth: number;
    /** 滚动方向 */
    direction: 'up' | 'down' | 'left' | 'right' | null;
    /** 是否滚动到顶部 */
    isScrollToTop: boolean;
    /** 是否滚动到底部 */
    isScrollToBottom: boolean;
    /** 是否滚动到左边 */
    isScrollToLeft: boolean;
    /** 是否滚动到右边 */
    isScrollToRight: boolean;
    /** 是否已经产生滚动条 */
    isOverflows: boolean;
}
/**
 * 视图监听配置
 */
export interface IntersectionConfig {
    /** 是否启用视图监听 */
    enabled?: boolean;
    /** 交叉阈值 (0-1) */
    threshold?: number | number[];
    /** 根边距 */
    rootMargin?: string;
    /** 元素进入视图回调 */
    onEnterViewport?: (entry: IntersectionObserverEntry, element: Element) => void;
    /** 元素离开视图回调 */
    onLeaveViewport?: (entry: IntersectionObserverEntry, element: Element) => void;
    /** 可见度变化回调 */
    onVisibilityChange?: (entry: IntersectionObserverEntry, element: Element) => void;
    /** 需要监听的元素选择器 */
    targetSelector?: string;
}
/**
 * 吸附滚动配置
 */
export interface SnapScrollConfig {
    /** 是否启用吸附滚动 */
    enabled?: boolean;
    /** 吸附类型 */
    type?: 'mandatory' | 'proximity';
    /** 吸附对齐方式 */
    align?: 'start' | 'center' | 'end';
    /** 吸附开始回调 */
    onSnapStart?: (targetIndex: number, targetPosition: number) => void;
    /** 吸附结束回调 */
    onSnapEnd?: (currentIndex: number, currentPosition: number) => void;
}
/**
 * PisellScrollView 组件 Props
 */
export interface PisellScrollViewProps {
    /** 子元素 */
    children?: ReactNode;
    /** 自定义类名 */
    className?: string;
    /** 自定义样式 */
    style?: CSSProperties;
    /** 滚动方向 */
    overflow?: 'auto' | 'scroll' | 'hidden' | 'x' | 'y' | 'both';
    /** 滚动条样式 */
    scrollbarStyle?: 'default' | 'thin' | 'minimal' | 'rounded' | 'overlay' | 'custom' | 'none';
    /** 自定义滚动条类名（当 scrollbarStyle 为 'custom' 时使用） */
    scrollbarClassName?: string;
    /** 是否显示滚动按钮 */
    showScrollButtons?: boolean;
    /** 箭头操作 */
    scrollActionsConfig?: ScrollActionsConfig;
    /** 滚动时触发 */
    onScroll?: (data: ScrollEventData) => void;
    /** 开始滚动时触发 */
    onScrollStart?: (data: ScrollEventData) => void;
    /** 滚动结束时触发（防抖延迟，默认 150ms） */
    onScrollEnd?: (data: ScrollEventData) => void;
    /** 滚动结束防抖延迟时间（ms） */
    scrollEndDelay?: number;
    /** 到达顶部时触发 */
    onReachTop?: (data: ScrollEventData) => void;
    /** 到达底部时触发 */
    onReachBottom?: (data: ScrollEventData) => void;
    /** 到达左边时触发 */
    onReachLeft?: (data: ScrollEventData) => void;
    /** 到达右边时触发 */
    onReachRight?: (data: ScrollEventData) => void;
    /** 边界阈值（到达边界的像素阈值） */
    reachThreshold?: number;
    /** IntersectionObserver 配置 */
    intersection?: IntersectionConfig;
    /** 吸附滚动配置 */
    snapScroll?: SnapScrollConfig;
    /** 容器宽度 */
    width?: number | string;
    /** 容器高度 */
    height?: number | string;
    /** 最大宽度 */
    maxWidth?: number | string;
    /** 最大高度 */
    maxHeight?: number | string;
    /** 最小宽度 */
    minWidth?: number | string;
    /** 最小高度 */
    minHeight?: number | string;
    /** Ref 引用 */
    ref?: React.Ref<PisellScrollViewRef>;
    /** 设计模式 */
    __designMode?: boolean;
}
/**
 * 组件暴露的方法
 */
export interface PisellScrollViewRef {
    /** 滚动到指定位置 */
    scrollTo: (position: ScrollPosition) => void;
    /** 滚动到指定元素 */
    scrollToElement: (config: ScrollToElementConfig) => void;
    /** 滚动到百分比位置 */
    scrollToPercentage: (percentage: ScrollPercentage) => void;
    /** 滚动到顶部 */
    scrollToTop: (behavior?: 'auto' | 'smooth') => void;
    /** 滚动到底部 */
    scrollToBottom: (behavior?: 'auto' | 'smooth') => void;
    /** 滚动到最左侧 */
    scrollToLeft: (behavior?: 'auto' | 'smooth') => void;
    /** 滚动到最右侧 */
    scrollToRight: (behavior?: 'auto' | 'smooth') => void;
    /** 获取当前滚动信息 */
    getScrollData: () => ScrollEventData;
    /** 获取滚动容器 DOM 元素 */
    getScrollContainer: () => HTMLElement | null;
    /** 滚动到指定吸附点（索引） */
    scrollToSnapPoint: (index: number, behavior?: 'auto' | 'smooth') => void;
    /** 获取所有吸附点位置 */
    getSnapPoints: () => number[];
    /** 获取当前吸附点索引 */
    getCurrentSnapIndex: () => number;
    /** 滚动到下一个吸附点 */
    scrollToNextSnap: (behavior?: 'auto' | 'smooth') => void;
    /** 滚动到上一个吸附点 */
    scrollToPrevSnap: (behavior?: 'auto' | 'smooth') => void;
}
