#!/usr/bin/env python3

import socket
import struct
import sys
import os

runtime = os.environ.get("XDG_RUNTIME_DIR") or "/tmp"
wl = os.environ["WAYLAND_DISPLAY"]
SOCK_PATH = f"{runtime}/argen-{wl}.sock"

def recv_exact(s: socket.socket, n: int) -> bytes:
    buf = bytearray()
    while len(buf) < n:
        chunk = s.recv(n - len(buf))
        if not chunk:
            raise EOFError("unexpected EOF while reading")
        buf += chunk
    return bytes(buf)


def main() -> int:
    argv = sys.argv[1:]

    payload = b"\x00".join(a.encode("utf-8") for a in argv)
    header = struct.pack("<I", len(payload))

    with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s:
        s.connect(SOCK_PATH)
        s.sendall(header)
        s.sendall(payload)

        status = recv_exact(s, 1)[0]
        (n,) = struct.unpack("<I", recv_exact(s, 4))

        msg = recv_exact(s, n).decode("utf-8")

    if status != 0:
        sys.stderr.write(msg)
        return 1
    else:
        if msg:
            print(msg)
        return 0


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