// import { EraserCommand } from "../commands/EraserCommand";
class EraserCommand { }

/**
 * 橡皮擦状态管理器
 * 用于管理橡皮擦操作的状态快照
 */
export class EraserStateManager {
	constructor(canvas, layerManager) {
		this.canvas = canvas;
		this.layerManager = layerManager;
		this.currentSnapshot = null;
		this.pendingCommand = null;
	}

	setLayerManager(layerManager) {
		this.layerManager = layerManager;
	}

	/**
	 * 开始橡皮擦操作 - 捕获初始状态
	 */
	startErasing() {
		console.log("橡皮擦操作开始 - 捕获状态快照");
		this.currentSnapshot = this._captureCanvasSnapshot();
	}

	/**
	 * 结束橡皮擦操作 - 创建命令
	 * @param {Array} affectedObjects 受影响的对象
	 * @returns {EraserCommand|null} 创建的橡皮擦命令
	 */
	endErasing(affectedObjects = []) {
		if (!this.currentSnapshot) {
			console.warn("没有初始状态快照，无法创建橡皮擦命令");
			return null;
		}

		if (!affectedObjects || affectedObjects.length === 0) {
			console.log("没有对象被擦除，不创建命令");
			this.currentSnapshot = null;
			return null;
		}

		console.log(`橡皮擦操作结束 - 影响了 ${affectedObjects.length} 个对象`);

		// 捕获擦除后的状态
		const afterSnapshot = this._captureCanvasSnapshot();

		// 创建橡皮擦命令
		const command = new EraserCommand({
			canvas: this.canvas,
			layerManager: this.layerManager,
			affectedObjects: affectedObjects,
			beforeSnapshot: this.currentSnapshot,
			afterSnapshot: afterSnapshot,
		});

		// 重置状态
		this.currentSnapshot = null;

		return command;
	}

	/**
	 * 捕获画布状态快照
	 * @returns {Object} 画布状态快照
	 * @private
	 */
	_captureCanvasSnapshot() {
		try {
			return this.canvas.toJSON([
				"id",
				"type",
				"layerId",
				"layerName",
				"isBackground",
				"isLocked",
				"isVisible",
				"isFixed",
				"parentId",
				"eraser",
				"eraserable",
				"erasable",
			]);
		} catch (error) {
			console.error("捕获画布状态快照失败:", error);
			return null;
		}
	}

	/**
	 * 取消当前擦除操作
	 */
	cancelErasing() {
		this.currentSnapshot = null;
		this.pendingCommand = null;
	}
	dispose() {}
}
