"""Plot a hinge or walking CSV without requiring a graphics window."""
import argparse
from pathlib import Path
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
p=argparse.ArgumentParser(description=__doc__);p.add_argument('csv',type=Path);p.add_argument('--out',default='run.png');a=p.parse_args()
d=np.genfromtxt(a.csv,delimiter=',',names=True)
if d.size==0:raise SystemExit('CSV has no data rows.')
d=np.atleast_1d(d)
if 'position_rad' in d.dtype.names:
    fig,ax=plt.subplots(2,1,figsize=(9,6),sharex=True)
    ax[0].plot(d['time_s'],d['position_rad'],label='measured');ax[0].plot(d['time_s'],d['target_rad'],'--',label='target');ax[0].set_ylabel('angle [rad]')
    ax[1].plot(d['time_s'],d['requested_torque_Nm'],label='requested');ax[1].plot(d['time_s'],d['applied_torque_Nm'],label='limited');ax[1].set_ylabel('torque [N m]')
else:
    fig,ax=plt.subplots(4,1,figsize=(10,9),sharex=True)
    for axes,actual,command,label in zip(ax[:3],['body_vx','body_vy','yaw_rate'],['cmd_vx','cmd_vy','cmd_yaw'],['forward [m/s]','sideways [m/s]','turn [rad/s]']):
        axes.plot(d['time_s'],d[actual],label='measured');axes.plot(d['time_s'],d[command],'--',label='command');axes.set_ylabel(label)
    ax[3].plot(d['time_s'],d['tilt_deg'],label='base tilt');ax[3].set_ylabel('tilt [deg]')
for axes in ax:axes.grid(alpha=.25);axes.legend(loc='upper right')
ax[-1].set_xlabel('simulation time [s]');fig.tight_layout();fig.savefig(a.out,dpi=160);print('Saved '+a.out)
