export interface EventWithPoint {
    readonly clientX: number;
    readonly clientY: number;
}

export const getRealPoint = (canvas: HTMLCanvasElement, e: EventWithPoint): DOMPoint => {
    const matrix = new DOMMatrix();
    const scale = Math.min(canvas.clientWidth / canvas.width, canvas.clientHeight / canvas.height);
    
    const realWidth = canvas.width * scale;
    const realHeight = canvas.height * scale;

    const offsetLeft = (canvas.clientWidth - realWidth) / 2;
    const offsetTop = (canvas.clientHeight - realHeight) / 2;

    matrix.translateSelf(offsetLeft, offsetTop);
    matrix.scaleSelf(scale);
    matrix.invertSelf();

    const point = new DOMPoint(e.clientX, e.clientY);

    return point.matrixTransform(matrix);
}
