# sender.py - gui file qua TCP toi receiver.py. Chay: python3 sender.py FILE [--host IP] [--tls]
import argparse
import hashlib
import json
import socket
import ssl
from pathlib import Path


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("file")
    ap.add_argument("--host", default="127.0.0.1")
    ap.add_argument("--port", type=int, default=9000)
    ap.add_argument("--token", default="doi-token-nay")
    ap.add_argument("--tls", action="store_true", help="dung TLS va tin cert.pem")
    ap.add_argument("--name", help="ghi de ten file gui di (dung de thu nghiem)")
    args = ap.parse_args()
    body = Path(args.file).read_bytes()
    header = {"name": args.name or Path(args.file).name, "size": len(body),
              "sha256": hashlib.sha256(body).hexdigest(), "token": args.token}
    try:
        raw = socket.create_connection((args.host, args.port), timeout=10)
        if args.tls:
            context = ssl.create_default_context(cafile="cert.pem")
            raw = context.wrap_socket(raw, server_hostname="localhost")
        with raw as conn:
            conn.sendall(json.dumps(header).encode("utf-8") + b"\n" + body)
            print("May nhan tra loi:", conn.recv(200).decode("utf-8", errors="replace").strip())
    except (OSError, ssl.SSLError) as err:
        raise SystemExit(f"Khong gui duoc: {err}")


if __name__ == "__main__":
    main()
