import { useRef, useCallback, useState, useEffect } from 'react';
import { CommandManager, Command } from '../commands';
import { useCanvasStore } from '@/lib/store/canvasStore';

/**
 * @deprecated 已弃用 - 使用 canvasStore 的增量历史系统
 * 
 * 这个 hook 现在只是一个包装器，将所有操作重定向到 canvasStore 的增量历史系统。
 * 保留此 hook 是为了向后兼容，新代码应直接使用 canvasStore：
 * 
 * ```tsx
 * const { undo, redo, canUndo, canRedo } = useCanvasStore();
 * ```
 * 
 * 原始实现使用 Command Pattern，已被 canvasStore 的 IncrementalHistory 取代。
 */
export const useUndoRedo = (maxHistorySize: number = 50) => {
    // 从 canvasStore 获取统一的撤销/重做功能
    const canvasUndo = useCanvasStore((state) => state.undo);
    const canvasRedo = useCanvasStore((state) => state.redo);
    const canvasCanUndo = useCanvasStore((state) => state.canUndo);
    const canvasCanRedo = useCanvasStore((state) => state.canRedo);
    const getHistoryStats = useCanvasStore((state) => state.getHistoryStats);

    // 保持兼容性的状态（虽然实际状态来自 canvasStore）
    const [historyState, setHistoryState] = useState({
        currentIndex: -1,
        historySize: 0
    });

    // 同步 canvasStore 的历史状态
    useEffect(() => {
        const stats = getHistoryStats();
        if (stats) {
            setHistoryState({
                currentIndex: stats.currentIndex,
                historySize: stats.totalSteps
            });
        }
    }, [getHistoryStats, canvasUndo, canvasRedo]);

    /**
     * @deprecated 使用 canvasStore.addNode/addEdge 替代
     */
    const execute = useCallback((command: Command) => {
        // 在新系统中，操作直接修改 canvasStore，历史自动保存
        // 为了保持兼容性，这里什么都不做
        if (process.env.NODE_ENV === 'development') {
            console.warn('[useUndoRedo.execute] 已弃用，直接修改 canvasStore 即可');
        }
    }, []);

    const undo = useCallback(() => {
        canvasUndo();
        // 更新本地状态以触发重新渲染
        const stats = getHistoryStats();
        if (stats) {
            setHistoryState({
                currentIndex: stats.currentIndex,
                historySize: stats.totalSteps
            });
        }
        return true;
    }, [canvasUndo, getHistoryStats]);

    const redo = useCallback(() => {
        canvasRedo();
        // 更新本地状态以触发重新渲染
        const stats = getHistoryStats();
        if (stats) {
            setHistoryState({
                currentIndex: stats.currentIndex,
                historySize: stats.totalSteps
            });
        }
        return true;
    }, [canvasRedo, getHistoryStats]);

    const canUndo = historyState.currentIndex >= 0;
    const canRedo = historyState.currentIndex < historyState.historySize - 1;

    const clear = useCallback(() => {
        // 在新系统中，历史在 canvasStore 中管理
        // 重置状态以匹配 canvasStore 的初始状态
        setHistoryState({
            currentIndex: -1,
            historySize: 0
        });
    }, []);

    if (process.env.NODE_ENV === 'development') {
        console.warn('[useUndoRedo] 已弃用，请迁移到 useCanvasStore: const { undo, redo, canUndo, canRedo } = useCanvasStore()');
    }

    return {
        execute,
        undo,
        redo,
        canUndo,
        canRedo,
        clear,
        commandManager: null // 不再暴露 commandManager
    };
};
