import type { BasePlugin } from '../BasePlugin';
import * as THREE from 'three';
/** 路径配置 */
export interface PathConfig {
    /** 路径唯一标识 */
    id: string;
    /** 路径点 */
    points: THREE.Vector3[];
    /** 是否启用 */
    enabled?: boolean;
    /** 是否可见 */
    visible?: boolean;
    /** 线条颜色（可选，覆盖全局配置） */
    color?: number;
    /** 线宽（可选，覆盖全局配置） */
    lineWidth?: number;
    /** 子网格颜色（可选，覆盖全局配置） */
    subMeshColor?: number;
    /** 子网格宽度（可选，覆盖全局配置） */
    subMeshWidth?: number;
    /** 子网格透明度（可选，覆盖全局配置） */
    subMeshOpacity?: number;
    /** 流光速度（可选，覆盖全局配置，单位：米/秒） */
    speed?: number;
    /** 流光范围（可选，覆盖全局配置，单位：米，默认 5.0） */
    range?: number;
    /** 是否启用子网格（可选，默认 true） */
    enableSubMesh?: boolean;
    /** 是否启用路径线和粒子效果（可选，默认 true） */
    enablePathline?: boolean;
}
/** 插件数据 */
export type PluginData = {
    paths: Map<string, PathConfig>;
};
/** 服务端数据 */
export type ServerData = {
    paths: Array<{
        id: string;
        points: Array<{
            x: number;
            y: number;
            z: number;
        }>;
        enabled?: boolean;
        visible?: boolean;
        color?: number;
        lineWidth?: number;
        subMeshColor?: number;
        subMeshWidth?: number;
        subMeshOpacity?: number;
        speed?: number;
        range?: number;
        enableSubMesh?: boolean;
        enablePathline?: boolean;
    }>;
};
/** 插件配置 */
export interface Config {
    /** 线条数量 */
    lineCount?: number;
    /** 线条间距 */
    spacing?: number;
    /** 线宽 */
    lineWidth?: number;
    /** 线条颜色 */
    color?: number;
    /** 流光速度（单位距离/秒，值越大速度越快） */
    speed?: number;
    /** 流光过渡范围（单位：米，默认 5.0） */
    range?: number;
    /** 波动幅度 */
    waveAmp?: number;
    /** 波动频率 */
    waveFreq?: number;
    /** 粒子数量 */
    particleCount?: number;
    /** 粒子最大飘散距离 */
    maxDistance?: number;
    /** pathline Y 轴偏移（相对于 subMesh 向上偏移） */
    lineYOffset?: number;
    /** 子网格宽度 */
    subMeshWidth?: number;
    /** 子网格底色 */
    subMeshColor?: number;
    /** 子网格基础透明度（最小透明度） */
    subMeshOpacity?: number;
    /** 子网格最大透明度（流光中心的透明度，默认 1.0） */
    subMeshMaxOpacity?: number;
    /** 子网格流光分段间隔（单位：米，默认 3.0） */
    subMeshSegmentInterval?: number;
    /** 子网格流光高亮带宽度（单位：米，默认 1.5） */
    subMeshHighlightWidth?: number;
}
/** 插件初始化参数 */
export interface Params {
    config?: Partial<Config>;
    initialState?: Partial<State>;
    /** 初始路径配置列表 */
    paths?: PathConfig[];
}
/** 插件状态 */
export interface State extends BasePlugin.State {
    /** 插件是否启用 */
    enabled: boolean;
    /** 插件整体是否可见 */
    visible: boolean;
    /** 动画是否正在播放 */
    playing: boolean;
}
/** 插件事件 */
export interface EventMap extends BasePlugin.EventMap<State, PluginData> {
    /** 动画开始播放 */
    animationStart: () => void;
    /** 动画停止播放 */
    animationStop: () => void;
    /** 路径添加 */
    pathAdd: (pathId: string, config: PathConfig) => void;
    /** 路径移除 */
    pathRemove: (pathId: string) => void;
    /** 路径启用 */
    pathEnable: (pathId: string) => void;
    /** 路径禁用 */
    pathDisable: (pathId: string) => void;
    /** 路径显示 */
    pathShow: (pathId: string) => void;
    /** 路径隐藏 */
    pathHide: (pathId: string) => void;
}
