#!/usr/bin/env python3
"""room-post — einen langen Rumpf aus einer DATEI in den Raum stellen.

`lmcp-tool` nimmt den Rumpf nur als Kommandozeilenargument. Fuer einen
Vertragstext ueber siebzig Zeilen ist das der falsche Kanal: Anfuehrungs-
zeichen, Dollarzeichen und Zeilenumbrueche muessten durch zwei Schalen und
einen Container. Deshalb hier gelesen und als JSON gesendet - der Text
beruehrt nie eine Kommandozeile.

Aufruf:  room-post <von> <an> <datei> [<geheimnis-datei>]
"""
import json
import os
import sys
import urllib.request

def main():
    if len(sys.argv) < 4:
        sys.exit("Aufruf: room-post <von> <an> <datei> [<geheimnis-datei>]")
    von, an, pfad = sys.argv[1], sys.argv[2], sys.argv[3]
    body = open(pfad, encoding="utf-8").read()

    args = {"from": von, "to": an, "body": body}
    # Privilegierte Nicks verlangen das gemeinsame Geheimnis. Es kommt aus einer
    # DATEI, nie aus einem Argument - Kommandozeilen stehen in der Prozessliste.
    if len(sys.argv) > 4 and os.path.exists(sys.argv[4]):
        args["secret"] = open(sys.argv[4], encoding="utf-8").read().strip()

    host = os.environ.get("LMCP_HOST", "127.0.0.1")
    port = os.environ.get("LMCP_PORT", "8080")
    tok = os.environ.get("LMCP_TOKEN", "")

    payload = json.dumps({"jsonrpc": "2.0", "id": 1, "method": "tools/call",
                          "params": {"name": "room_say", "arguments": args}}).encode()
    req = urllib.request.Request(
        f"http://{host}:{port}/mcp", data=payload,
        headers={"Content-Type": "application/json",
                 "Accept": "application/json, text/event-stream",
                 "Authorization": f"Bearer {tok}"})
    raw = urllib.request.urlopen(req, timeout=60).read().decode()
    for line in raw.splitlines():
        if line.startswith("data: "):
            raw = line[6:]
            break
    d = json.loads(raw)
    if "error" in d:
        sys.exit(f"abgelehnt: {d['error']}")
    print(json.dumps(d.get("result", d))[:400])

main()
