M291 R"Y-Axis Endstop Alignment Test" P"This test checks Y-axis gantry squareness by measuring endstop alignment. Three homing cycles will be performed." S4 K{"Test","Skip","Cancel"}
if input == 1
    M99
elif input == 2
    abort "Test cancelled by user"

M98 P"0:/sys/homey.g"

M84 XYU
G4 S3

M98 P"0:/sys/homey.g" T1
M400
G4 P500
var dis1 = global.HomeYDis
echo "Test 1: The "^{global.HomeYSide}^" side was adjusted by "^{global.HomeYDis}^" mm"

M84 XYU
G4 S5

M98 P"0:/sys/homey.g" T1
M400
G4 P500
var dis2 = global.HomeYDis
echo "Test 2: The "^{global.HomeYSide}^" side was adjusted by "^{global.HomeYDis}^" mm"

M84 XYU
G4 S5

M98 P"0:/sys/homey.g" T1
M400
G4 P500
var dis3 = global.HomeYDis
echo "Test 3: The "^{global.HomeYSide}^" side was adjusted by "^{global.HomeYDis}^" mm"

var avgDis = (var.dis1 + var.dis2 + var.dis3) / 3

if var.avgDis < 0.4
  M98 P"0:/sys/led/end.g"
  echo "Y-Axis Alignment Test PASSED - Average Adjustment: "^{var.avgDis}^" mm"
  M98 P"0:/sys/led/resetstatus.g"
else
  M98 P"0:/sys/led/fault.g"
  var failMsg = "Y-Axis Alignment Test FAILED<br><br>"
  set var.failMsg = var.failMsg ^ "Average misalignment: " ^ {var.avgDis} ^ " mm<br>"
  set var.failMsg = var.failMsg ^ "Tolerance: 0.4 mm<br><br>"
  set var.failMsg = var.failMsg ^ "The <b>" ^ {global.HomeYSide} ^ "</b> side Y-endstop needs adjustment.<br><br>"
  set var.failMsg = var.failMsg ^ "Loosen the " ^ {global.HomeYSide} ^ " Y-endstop mounting and adjust its position to reduce misalignment."
  M291 R"Y-Axis Alignment Failed" P{var.failMsg} S2
  M98 P"0:/sys/led/resetstatus.g"
  abort "Error: Y-Axis misalignment exceeds tolerance: " ^ {var.avgDis} ^ " mm"