import sys
import os
import json
import time

# Add core to path
sys.path.append(os.path.join(os.getcwd(), 'core'))

try:
    from core.genesis_kernel import GenesisKernel
    from core.surprise_memory import SurpriseScore, SurpriseLevel
except ImportError:
    try:
        from genesis_kernel import GenesisKernel
        from surprise_memory import SurpriseScore, SurpriseLevel
    except ImportError as e:
        print(f"IMPORT ERROR: {e}")
        # Try adding core locally
        sys.path.append(os.path.join(os.getcwd(), 'core'))
        try:
            from genesis_kernel import GenesisKernel
            from surprise_memory import SurpriseScore, SurpriseLevel
        except ImportError:
             # Direct import from file path as last resort
             import importlib.util
             spec = importlib.util.spec_from_file_location("genesis_kernel", "core/genesis_kernel.py")
             gk = importlib.util.module_from_spec(spec)
             spec.loader.exec_module(gk)
             GenesisKernel = gk.GenesisKernel
             
             spec2 = importlib.util.spec_from_file_location("surprise_memory", "core/surprise_memory.py")
             sm = importlib.util.module_from_spec(spec2)
             spec2.loader.exec_module(sm)
             SurpriseScore = sm.SurpriseScore
             SurpriseLevel = sm.SurpriseLevel

def verify_rlm_flow():
    print("1. Initializing Kernel...")
    kernel = GenesisKernel()
    
    # Manually trigger a "High Surprise" event
    print("\n2. Simulating High-Surprise Event...")
    content = "The system completely failed to recognize the user due to a critical bio-auth error."
    
    # We mock the surprise score to force RLM capture (logic is > 0.6)
    
    # Call the remember method which should trigger RLM store
    # Content has 'critical' which triggers high surprise intnerally
    print("   Calling kernel.remember()...")
    memory_id = kernel.remember(content)
    print(f"   Memory ID generated: {memory_id}")
    
    # Check RLM Graph for the new node
    print("\n3. Verifying RLM Graph Update...")
    with open("memory/knowledge_graph.json", "r") as f:
        graph = json.load(f)
        
    found = False
    for entity in graph['entities']:
        # The logic adds "EVENT_{memory_id[:8]}"
        expected_name = f"EVENT_{memory_id[:8]}"
        if entity['name'] == expected_name:
            print(f"   [PASS] Found Node: {entity['name']}")
            print(f"          Type: {entity['entityType']}")
            print(f"          Observations: {entity['observations']}")
            found = True
            break
            
    if not found:
        print("   [FAIL] Expected RLM node not found!")
        sys.exit(1)

    print("\n4. Verifying Traversal Layer...")
    # Try traversing from this new node to 'GENESIS_EVOLUTION' (if linked) or just check retrieval
    # For now, let's just query it back via bridge
    results = kernel.rlm.query("bio-auth")
    if len(results) > 0:
         print(f"   [PASS] RLM Bridge Query returned {len(results)} result(s).")
    else:
         print("   [FAIL] RLM Bridge Query failed.")
         sys.exit(1)

    print("\n[SUCCESS] RLM Integration Verified.")

if __name__ == "__main__":
    verify_rlm_flow()
