"""
spot_connect_test.py - safe, step-by-step Spot connection check.

Acquires NO lease and sends NO commands. Reads state only, so it is safe
to run at any time, including during a motors-off dry run.

Usage:
    python spot_connect_test.py <ROBOT_IP> <USERNAME> <PASSWORD>

Example:
    python spot_connect_test.py 10.0.0.3 admin <password>
"""

import sys
import bosdyn.client
from bosdyn.client.estop import EstopClient
from bosdyn.client.robot_state import RobotStateClient

if len(sys.argv) != 4:
    print(__doc__)
    sys.exit(1)

HOSTNAME, USERNAME, PASSWORD = sys.argv[1], sys.argv[2], sys.argv[3]

print("1. Creating SDK object...")
sdk = bosdyn.client.create_standard_sdk('GestureDryRun')

print("2. Creating robot object at", HOSTNAME)
robot = sdk.create_robot(HOSTNAME)

print("3. Authenticating...")
robot.authenticate(USERNAME, PASSWORD)
print("   OK")

print("4. Time sync...")
robot.time_sync.wait_for_sync()
print("   OK")

print("5. Robot ID:")
print("  ", robot.get_id())

print("6. E-stop status:")
estop_client = robot.ensure_client(EstopClient.default_service_name)
print("  ", estop_client.get_status())

print("7. Is estopped?", robot.is_estopped())

print("8. Power state:")
state_client = robot.ensure_client(RobotStateClient.default_service_name)
print("  ", state_client.get_robot_state().power_state)

print("\nConnection test complete - no lease acquired, nothing commanded.")
