#!/usr/bin/env python3
"""Print battery percentage of JBL Quantum wireless headsets."""
import argparse
import json
import os
import sys
import time

sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
from jbl_battery import find_devices, read_battery  # noqa: E402


def main():
    ap = argparse.ArgumentParser(description=__doc__)
    ap.add_argument("--json", action="store_true", help="print JSON")
    ap.add_argument("--watch", type=float, metavar="SECS", help="repeat every SECS seconds")
    ap.add_argument("--timeout", type=float, default=3.0,
                    help="seconds to wait for a pushed battery report (default 3)")
    ap.add_argument("-q", "--quiet", action="store_true", help="print just the number")
    args = ap.parse_args()

    while True:
        devices = list(find_devices())
        if not devices:
            print("No JBL Quantum headset dongle found.", file=sys.stderr)
            return 2
        status = 0
        for path, name in devices:
            try:
                level, connected = read_battery(path, args.timeout)
            except PermissionError:
                print(f"Permission denied on {path}; install the udev rule (see README).",
                      file=sys.stderr)
                return 3
            if args.json:
                print(json.dumps({"device": name, "hidraw": path, "battery": level,
                                  "connected": connected}), flush=True)
            elif args.quiet:
                print(level if connected and level is not None else "", flush=True)
            elif not connected:
                last = f" (last {level}%)" if level is not None else ""
                print(f"{name}: not connected{last}", flush=True)
                status = 1
            elif level is None:
                print(f"{name}: battery unknown", flush=True)
                status = 1
            else:
                print(f"{name}: {level}%", flush=True)
        if args.watch is None:
            return status
        time.sleep(args.watch)


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