#!/usr/bin/env python3
"""
Start/stop GSS6450 Spirent RF recording at a future time. Mainly useful if an
event is happening at an inconvenient time.

Example to record from 11:01pm to 1am local time:
  ./spirentAutoRecord.py 2025-08-01-23-01 2025-08-02-01-00

"""
import requests
import time
from datetime import datetime
import argparse

def wait_until(end_datetime):
    diff = (end_datetime - datetime.now()).total_seconds()
    print("Going to wait %.3f hours"%(diff/3600.0))
    while True:
        diff = (end_datetime - datetime.now()).total_seconds()
        if diff < 0: return       # In case end_datetime was in past to begin with
        time.sleep(diff/2)
        if diff <= 0.1: return

def start_recording(spirent_IP):
    print("Starting recording..")
    req = requests.get(f'http://{spirent_IP}/rec.shtml')
    print(req.status_code)
    can_record = req.text.find("START RECORDING") > 0
    print('can_record',can_record)
    if not can_record:
        return False

    print(datetime.now())
    req = requests.post(f'http://{spirent_IP}/cgi-bin/record.cgi',
                        data='TriggerOptions=RecordTriggerOFF&DatePicker=&TimePicker=00+%3A+00'
                        )
    print(req.status_code)

def stop_recording(spirent_IP):
    print("Stopping recording..")
    print(datetime.now())
    req = requests.post(f'http://{spirent_IP}/cgi-bin/stop.cgi')
    print(req.status_code)


if __name__ == '__main__':
    parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter,
                                     description=__doc__)
    parser.add_argument(
        'start_date',
        help='Start time YYYY-MM-DD-HH-MM, e.g., 2025-08-01-20-15 (for Aug 1,2025 8:15pm local time)',
        type=lambda s: datetime.strptime(s, '%Y-%m-%d-%H-%M'),
    )
    parser.add_argument(
        'end_date',
        help='End time YYYY-MM-DD-HH-MM, e.g., 2025-08-01-22-19 (for Aug 1,2025 10:19pm local time)',
        type=lambda s: datetime.strptime(s, '%Y-%m-%d-%H-%M'),
    )
    parser.add_argument('--spirent_IP',
                        default='10.1.149.158',
                        help='Spirent IP (default 10.1.149.158)')
    args = parser.parse_args()

    print(datetime.now())
    wait_until(args.start_date)
    start_recording(args.spirent_IP)

    wait_until(args.end_date)
    stop_recording(args.spirent_IP)
