#!/usr/bin/env python3
"""
push_grounding.py — Mac side. Sends grounding.md to Malin's 5090 grounding_receiver
so her long-term memory updates hands-free. Skips the push if nothing changed.

Usage:
  /usr/bin/python3 push_grounding.py            # push only if grounding.md changed
  /usr/bin/python3 push_grounding.py --force     # push regardless
Importable: push_grounding(force=False) -> (ok: bool, detail: str)
"""
import hashlib, os, sys
import requests

HERE = os.path.dirname(os.path.abspath(__file__))
GROUNDING = os.path.join(HERE, "grounding.md")
STATE = os.path.join(HERE, ".grounding_pushed_hash")
RECEIVER = "http://100.123.118.101:1235/grounding"


def _hash(data):
    return hashlib.sha256(data).hexdigest()


def push_grounding(force=False):
    if not os.path.exists(GROUNDING):
        return False, "no grounding.md found"
    with open(GROUNDING, "rb") as f:
        data = f.read()
    h = _hash(data)
    if not force and os.path.exists(STATE):
        try:
            if open(STATE).read().strip() == h:
                return True, "unchanged — skipped"
        except Exception:
            pass
    try:
        r = requests.post(RECEIVER, data=data,
                          headers={"Content-Type": "text/markdown"}, timeout=20)
        if r.status_code == 200:
            with open(STATE, "w") as f:
                f.write(h)
            return True, f"pushed ({len(data)} bytes)"
        return False, f"receiver returned {r.status_code}"
    except requests.exceptions.RequestException as e:
        return False, f"receiver unreachable ({type(e).__name__}) — is grounding_receiver.py running on the 5090?"


if __name__ == "__main__":
    ok, detail = push_grounding(force="--force" in sys.argv)
    print(("OK: " if ok else "FAILED: ") + detail)
    sys.exit(0 if ok else 1)
