import { PasteSelectionCommandBase } from "./PasteSelectionCommandBase";
import { DiagramItem } from "../../Model/DiagramItem";
import { Shape } from "../../Model/Shapes/Shape";
import { Connector } from "../../Model/Connectors/Connector";
import { Point } from "@devexpress/utils/lib/geometry/point";

export class PasteSelectionInPositionCommand extends PasteSelectionCommandBase {
    protected getEventPositionOffset(items: DiagramItem[], evtPosition?: Point): Point {
        if(!evtPosition) return Point.zero();
        const selectionPos = items.reduce((min, i) => {
            return {
                x: Math.min(min.x, i instanceof Shape ? i.position.x : i instanceof Connector ? i.getMinX() : Number.MAX_VALUE),
                y: Math.min(min.y, i instanceof Shape ? i.position.y : i instanceof Connector ? i.getMinY() : Number.MAX_VALUE)
            };
        }, {
            x: Number.MAX_VALUE,
            y: Number.MAX_VALUE
        });
        const newSelectionPos = this.control.render.getModelPointByEventPoint(evtPosition.x, evtPosition.y);
        return new Point(
            newSelectionPos.x - selectionPos.x,
            newSelectionPos.y - selectionPos.y
        );
    }
}
