#!/usr/bin/env python3
"""Samsung Q60BA TV control via Tizen WebSocket API (no Allow popup needed).

Usage:
  python3 tv-ctrl.py KEY_POWER
  python3 tv-ctrl.py KEY_VOLUP KEY_VOLUP KEY_VOLUP
  python3 tv-ctrl.py KEY_HOME
"""
import sys, ssl, base64, json, time, websocket

TV_IP = "192.168.1.163"
NAME = base64.b64encode(b"PiCtrl").decode()
TOKEN_FILE = "/home/johnbarley/files/samsung-tv-token.txt"

with open(TOKEN_FILE) as f:
    token = f.read().strip()

url = f"wss://{TV_IP}:8002/api/v2/channels/samsung.remote.control?name={NAME}&token={token}"
ws = websocket.create_connection(url, sslopt={"cert_reqs": ssl.CERT_NONE}, timeout=10)

# Wait for ms.channel.connect (silent — token valid, no popup)
ws.settimeout(5)
for _ in range(8):
    try:
        msg = json.loads(ws.recv())
    except Exception:
        break
    if msg.get("event") == "ms.channel.connect":
        break
    if msg.get("event") == "ms.channel.unauthorized":
        print("TV rejected token — re-auth needed")
        sys.exit(1)

keys = sys.argv[1:] or ["KEY_POWER"]
for key in keys:
    cmd = {"method": "ms.remote.control",
           "params": {"Cmd": "Click", "DataOfCmd": key,
                      "Option": "false", "TypeOfRemote": "SendRemoteKey"}}
    ws.send(json.dumps(cmd))
    print(f"sent: {key}")
    time.sleep(0.4)

ws.close()
