"""Offline commissioning exercise. Standard library only; no device libraries."""
from dataclasses import dataclass,replace
import math
@dataclass(frozen=True)
class Sample:
    angle_rad:float
    rate_rad_s:float
    timestamp_s:float
    encoder_sign:int=1
    zero_offset_rad:float=0

def evaluate(sample,now_s,target_rad,armed=False):
    if not all(math.isfinite(v) for v in (sample.angle_rad,sample.rate_rad_s,sample.timestamp_s,now_s,target_rad)):
        return 'reject: nonfinite value'
    if now_s-sample.timestamp_s<0 or now_s-sample.timestamp_s>.1:return 'reject: timestamp age'
    if sample.encoder_sign not in (-1,1):return 'reject: invalid sign'
    q=sample.encoder_sign*(sample.angle_rad-sample.zero_offset_rad)
    if abs(q)>.8 or abs(target_rad)>.8:return 'reject: teaching limit'
    if not armed:return 'observe only: not armed'
    return f'mock target {target_rad:.3f} rad; measured {q:.3f} rad'

def main():
    base=Sample(.2,0,9.98)
    cases=[('unarmed',base,10.,.25,False,'observe only'),('normal',base,10.,.25,True,'mock target'),('stale',replace(base,timestamp_s=9),10.,.25,True,'reject'),('future timestamp',replace(base,timestamp_s=11),10.,.25,True,'reject'),('NaN',replace(base,angle_rad=float('nan')),10.,.25,True,'reject'),('target out of bounds',base,10.,2.,True,'reject')]
    for label,s,now,target,armed,prefix in cases:
        answer=evaluate(s,now,target,armed);assert answer.startswith(prefix),(label,answer);print(label+': '+answer)
    # A wrong valid sign cannot be detected from plausible readings alone.
    wrong=evaluate(replace(base,encoder_sign=-1),10.,.25,True)
    print('wrong-but-valid sign requires a known-direction calibration: '+wrong)
    print('All six mock checks passed. These teaching thresholds are not robot safety limits.')
if __name__=='__main__':main()
