"""
Testing script that runs many of the urx methods, while attempting to keep robot pose around its starting pose
"""

from math import pi
import time
import sys

import urx
import logging

if sys.version_info[0] < 3:  # support python v2
    input = raw_input

def wait():
    if do_wait:
        input()

if __name__ == "__main__":
    logging.basicConfig(level=logging.WARN)
    
    do_wait = True
    if len(sys.argv) > 1:
        do_wait = False

    #rob = urx.Robot("192.168.1.6")
    rob = urx.Robot("localhost")
    rob.set_tcp((0, 0, 0, 0, 0, 0))
    rob.set_payload(0.5, (0, 0, 0))
    try:
        l = 0.05
        v = 0.05
        a = 0.3
        r = 0.01
        print("Digital out 0 and 1 are: ", rob.get_digital_out(0), rob.get_digital_out(1))
        print("Analog inputs are: ", rob.get_analog_inputs())
        initj = rob.getj()
        print("Initial joint configuration is ", initj)
        t = rob.get_pose()
        print("Transformation from base to tcp is: ", t)

        print("Translating in x")
        wait()
        rob.translate((l, 0, 0), acc=a, vel=v)
        pose = rob.getl()
        print("robot tcp is at: ", pose)

        print("moving in z")
        wait()
        pose[2] += l
        rob.movel(pose, acc=a, vel=v, wait=False)
        print("Waiting for end move")
        rob.wait_for_move(0, pose)

        print("Moving through several points with a radius")
        wait()
        pose[0] -= l
        p1 = pose[:]
        pose[2] -= l
        p2 = pose[:]
        rob.movels([p1, p2], vel=v, acc=a, radius=r)

        print("rotate tcp around around base z ")
        wait()
        t.orient.rotate_zb(pi / 8)
        rob.set_pose(t, vel=v, acc=a)

        print("moving in tool z")
        wait()
        rob.translate_tool((0, 0, l), vel=v, acc=a)

        print("moving in tool -z using speed command")
        wait()
        rob.speedl_tool((0, 0, -v, 0, 0, 0), acc=a, min_time=3)
        print("Waiting 2 seconds2")
        time.sleep(2)
        print("stop robot")
        rob.stopj()

        print("Test movep, it will fail on older controllers")
        wait()
        init = rob.get_pose()
        pose = init.copy()
        for _ in range(3):
            pose.pos[0] += l
            rob.movep(pose, acc=a, vel=v, radius=r)
        rob.movep(init, acc=a, vel=v, radius=r)  # back to start

        print("Test movec")
        wait()
        via = init.copy()
        via.pos[0] += l
        to = via.copy()
        to.pos[1] += l
        rob.movec(via, to, acc=a, vel=v, radius=r)

        print("Sending robot back to original position")
        rob.movej(initj, acc=0.8, vel=0.2)

    finally:
        rob.close()