"""USB bridge for RK-14. pip install pyserial; run with --help."""
import argparse
import json
import os
import time
from urllib.error import URLError
from urllib.parse import urlencode
from urllib.request import Request, urlopen

def statistics(channel, key):
    query = urlencode({"part":"statistics","id":channel})
    request = Request("https://www.googleapis.com/youtube/v3/channels?" + query,
                      headers={"X-Goog-Api-Key":key})
    with urlopen(request, timeout=12) as response:
        items = json.load(response)["items"]
    if not items:
        raise ValueError("Kanal topilmadi")
    stats = items[0]["statistics"]
    subs = "-" if stats.get("hiddenSubscriberCount") else str(int(stats["subscriberCount"]))
    return f"LIVE {subs} {int(stats['videoCount'])}"

def main():
    import serial
    parser=argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--port",required=True)
    parser.add_argument("--demo",action="store_true")
    parser.add_argument("--channel",help="Kanalning UC bilan boshlanuvchi ID raqami")
    args=parser.parse_args()
    key=os.environ.get("YOUTUBE_API_KEY")
    if not args.demo and not (key and args.channel):
        parser.error("Jonli rejim uchun --channel va YOUTUBE_API_KEY kerak.")
    with serial.Serial(args.port,9600,write_timeout=3) as port:
        time.sleep(2)
        while True:
            try:
                message="DEMO 12500 42" if args.demo else statistics(args.channel,key)
            except (URLError,TimeoutError,KeyError,ValueError):
                message="ERROR"
            port.write((message+"\n").encode("ascii"))
            print(message,flush=True)
            time.sleep(60)

if __name__=="__main__":
    main()
