import { default as OlMap } from 'ol/Map';
import { IHighlightSignalControlAreaParams, IResult, IShowSignalSystemParams, IShowSubSignalSystemParams } from 'packages/components/src/types';
/**
 * 信号系统控制器
 * 用于在 OpenLayers 地图上展示和管理信号子区系统
 * 包括子区道路线（LineString）和路口节点（Point）的渲染
 */
export default class SignalSystemController {
    /** OpenLayers 地图实例 */
    private map;
    /** 矢量数据源，存储所有信号系统要素 */
    private source;
    /** 信号系统图层 */
    private signalSystemLayer;
    /** 存储子系统数据，用于 zoom 变化时重新渲染 */
    private subSystemDataMap;
    /** zoom 变化监听器引用，用于移除监听 */
    private zoomChangeListener;
    private grayLineStyle;
    private grayPointStyle;
    /** 当前高亮状态，用于在重新渲染时判断是否应该隐藏 feature */
    private highlightState;
    /**
     * 构造函数
     * @param map - OpenLayers 地图实例
     */
    constructor(map: OlMap);
    private mapClick;
    /**
     * 设置 zoom 变化监听器
     */
    private setupZoomListener;
    /**
     * 判断 zoom 是否跨越了指定阈值
     * @param oldZoom - 旧的 zoom 值
     * @param newZoom - 新的 zoom 值
     * @param threshold - 阈值
     * @returns 是否跨越阈值
     */
    private hasCrossedThreshold;
    /**
     * 重新渲染所有已存储的子系统
     */
    private reRenderAllSubSystems;
    /**
     * 计算点集的重心坐标
     * @param points - 点坐标数组 [{x, y}, ...]
     * @returns 重心坐标 [x, y]
     */
    private calculateCentroid;
    /** 根据区控和子区编码查找子区 */
    private findSubSystem;
    /** 聚焦子区：优先保证可见所有路口 */
    private focusSubSystem;
    /** 计算子区路口范围，确保地图能看到所有路口 */
    private getSubSystemCrossExtent;
    /** 根据子区数据计算中心点 */
    private getSubSystemCenter;
    showSignalSystem(params: IShowSignalSystemParams): Promise<IResult> | {
        status: number;
        message: string;
    };
    removeSignalSystem(areaCode?: string): void;
    private showSystem;
    /**
     * 展示多个信号子区系统
     * 遍历所有子区并渲染，完成后自动缩放地图视角以显示所有子区
     *
     * @param params - 展示参数，包含子区列表
     * @returns 操作结果
     */
    showSubSignalSystem(params: IShowSubSignalSystemParams): Promise<IResult>;
    /**
     * 移除信号子区系统
     * 若不传 subCode，则清除所有子区；否则只清除指定子区
     *
     * @param subCode - 可选，子区编码。不传则清除全部
     */
    removeSubSignalSystem(subCode?: string): void;
    highlight(params: IHighlightSignalControlAreaParams): IResult;
    resetHighlight(): void;
    /**
     * 渲染单个信号子区系统
     * 包括子区道路线和路口节点的渲染
     *
     * @param subSystem - 信号子区系统数据
     * @param areaCode - 区域编码，用于关联要素
     */
    private showSubSystem;
    /**
     * 根据当前 zoom 级别渲染子系统
     * zoom <= 13: 显示重心图标（不显示道路和路口）
     * zoom >= 14: 显示 subShape 和 children
     *
     * @param subSystem - 子区系统数据
     * @param areaCode - 区控编码
     */
    private renderSubSystem;
    /**
     * 渲染子系统重心图标
     * @param subSystem - 信号子区系统数据
     * @param areaCode - 区域编码
     */
    private renderCentroidIcon;
    /**
     * 渲染子系统详细信息（道路线和节点）
     * @param subSystem - 信号子区系统数据
     * @param areaCode - 区域编码
     */
    private renderSubSystemDetail;
    /**
     * 根据缩放层级获取路口节点样式
     * 14 <= zoom < 17: 显示蓝色圆点
     * zoom >= 17: 显示传入参数配置的 symbol
     *
     * @param symbol - 节点符号配置
     * @param node - 节点数据
     * @param zoom - 当前缩放层级
     * @returns 样式对象
     */
    private getNodeStyleByZoom;
}
