#!/usr/bin/env python3
"""rlm_query.py -- Genesis RLM CLI Query Tool
Usage:
  python rlm_query.py --type CLIENT
  python rlm_query.py --name George
  python rlm_query.py --recent 10
  python rlm_query.py --stats
  python rlm_query.py --test
"""

import sys
import argparse

sys.path.insert(0, "E:/genesis-system/core")
import rlm_adapter


def _fmt(e, v=False):
    ts = e.get("last_seen", "")
    if hasattr(ts, "strftime"):
        ts = ts.strftime("%Y-%m-%d %H:%M")
    else:
        ts = str(ts)[:16] if ts else ""
    name = e["name"][:80] if e["name"] else ""
    etype = e["entity_type"]
    mc = e.get("mention_count", 1) or 1
    s = f"  [{etype}] {name}"
    if ts:
        s += f" (seen: {ts})"
    if mc > 1:
        s += f" x{mc}"
    if v and e.get("description"):
        s += f"
    {e[chr(39)]description{chr(39)]}[:120]}"
    return s


def cmd_stats(_):
    st = rlm_adapter.get_stats()
    print("=== Genesis RLM Statistics ===")
    te = st["total_entities"]
    tr = st["total_relationships"]
    ts = st["total_sessions"]
    tev = st["total_events"]
    print(f"  Total entities:      {te:,}")
    print(f"  Total relationships: {tr:,}")
    print(f"  Total sessions:      {ts:,}")
    print(f"  Total events:        {tev:,}")
    print("")
    print("  Entity breakdown:")
    for etype, count in st["by_type"].items():
        bar = "#" * min(count // 20, 40)
        print(f"    {etype:<15} {count:>6,}  {bar}")


def cmd_type(args):
    etype = args.type.upper()
    limit = args.limit or 50
    results = rlm_adapter.query_entities(entity_type=etype, limit=limit)
    if not results:
        print("No " + etype + " entities found.")
        return
    print(str(len(results)) + " " + etype + " entities (most recent first):")
    for e in results:
        print(_fmt(e, v=args.verbose))


def cmd_name(args):
    results = rlm_adapter.query_entities(name_like=args.name, limit=args.limit or 20)
    if not results:
        print("No entities matching: " + args.name)
        return
    print(str(len(results)) + " matches for " + repr(args.name) + ":")
    for e in results:
        print(_fmt(e, v=args.verbose))


def cmd_recent(args):
    results = rlm_adapter.get_recent_entities(limit=args.recent)
    if not results:
        print("No entities in RLM yet.")
        return
    print("Last " + str(args.recent) + " entities by last_seen:")
    for e in results:
        print(_fmt(e, v=args.verbose))


def cmd_test(args):
    ok = rlm_adapter.test_connection()
    if ok:
        cmd_stats(args)
    else:
        sys.exit(1)


