import { FLOOR_MAP_SELECTION_ZONE_ELEMENT_KIND } from "../types.js";
//#region src/components/pisellFloorMapLayout/utils/floorMapSelectionZone.ts
/**
* 选区（selection zone）几何工具：成员关系按「完全包含」实时计算，不持久化成员列表。
*
* - 判定规则：图元的包围盒**完全落在**选区矩形内（含边界）即为该选区成员。
* - 排除项：选区自身、其它选区、布局锁定（layoutTransformLocked）的图元。
* - 成员仅在「拖拽开始那一刻」按当前坐标快照一次，拖动过程中集合不变，避免边界抖动。
*/
/** 该图元是否为选区 */
function isSelectionZoneItem(item) {
	return item.elementKind === FLOOR_MAP_SELECTION_ZONE_ELEMENT_KIND;
}
/** zoneRect 是否「完全包含」itemRect（含边界，允许 1px 容差以抵消取整误差） */
function rectFullyContains(zoneRect, itemRect, tolerance = .5) {
	return itemRect.left >= zoneRect.left - tolerance && itemRect.top >= zoneRect.top - tolerance && itemRect.left + itemRect.width <= zoneRect.left + zoneRect.width + tolerance && itemRect.top + itemRect.height <= zoneRect.top + zoneRect.height + tolerance;
}
/**
* 计算选区成员 id 列表（输入为像素矩形坐标系）。
*
* @param zoneId      选区自身 id（排除自身）
* @param zoneRect    选区矩形（像素）
* @param itemRects   画布上全部图元及其像素矩形
*/
function computeSelectionZoneMemberIds(zoneId, zoneRect, itemRects) {
	return itemRects.filter(({ item }) => {
		var _item$_sceneElement;
		if (item.id === zoneId) return false;
		if (isSelectionZoneItem(item)) return false;
		if ((_item$_sceneElement = item._sceneElement) === null || _item$_sceneElement === void 0 ? void 0 : _item$_sceneElement.layoutTransformLocked) return false;
		return true;
	}).filter(({ rect }) => rectFullyContains(zoneRect, rect)).map(({ item }) => item.id);
}
//#endregion
export { computeSelectionZoneMemberIds, isSelectionZoneItem };
