#! /usr/bin/env python3
import argparse
import sys
import logging
import serial

logger = logging.getLogger(__name__)


def main() -> int:
    # Handle program arguments
    ap = argparse.ArgumentParser(
        prog="kxlisten", description="Route inbound CW text to STDOUT"
    )
    ap.add_argument("--stop", help="Stop listening", action="store_true")
    ap.add_argument("--device", "-d", help="Serial device", default="/dev/ttyUSB0")
    ap.add_argument("--baud", "-b", help="Serial baud rate", default=38400, type=int)
    ap.add_argument(
        "-v", "--verbose", help="Enable verbose logging", action="store_true"
    )
    args = ap.parse_args()

    # Configure logging
    logging.basicConfig(
        level=logging.DEBUG if args.verbose else logging.INFO,
        format="%(levelname)s:	%(message)s",
        stream=sys.stderr,
    )

    # Connect to the radio
    logger.debug(f"Connecting to radio: {args.device}")
    serial_conn = serial.Serial(args.device, args.baud)
    
    # Handle stopping
    if args.stop:
        cmd = "TT0;"
        logger.debug(f"Sending command: {cmd}")
        serial_conn.write(cmd.encode("ascii"))
        return 0
    
    # Otherwise, start listening
    cmd = "TT1;"
    logger.debug(f"Sending command: {cmd}")
    serial_conn.write(cmd.encode("ascii"))
    
    # Listen for text
    try:
        while True:
            next_char = serial_conn.read().decode("ascii")
            print(next_char, end="")
            sys.stdout.flush()
    except KeyboardInterrupt:
        logger.info("Stopping")
        cmd = "TT0;"
        logger.debug(f"Sending command: {cmd}")
        serial_conn.write(cmd.encode("ascii"))

    return 0


if __name__ == "__main__":
    sys.exit(main())