import json
import os
import sys
sys.path.append('/mnt/e/genesis-system/data/genesis-memory')
from elestio_config import PostgresConfig
import psycopg2
from datetime import datetime, timedelta
from pathlib import Path

class MemoryDigestion:
    """
    Night-Cycle Memory Digestion:
    - Sorting: Moving working memory to episodic/semantic.
    - Cropping: Pruning low-score episodic memories.
    - Sorting: Categorizing by domain and impact.
    """
    def __init__(self):
        self.conn_params = PostgresConfig.get_connection_params()

    def digest(self):
        print(f"🌙 [DIGESTION] Starting memory optimization cycle...")

        # 1. Prune Old Low-Impact Episodes
        self._prune_low_impact(threshold=0.4, age_days=7)

        # 2. Promote High-Frequency Memories
        # (This would normally interact with Redis, but here we focus on local state)

        # 3. Consolidate Semantic Entities
        self._consolidate_semantic()

        print(f"✅ [DIGESTION] Cycle complete.")

    def _prune_low_impact(self, threshold, age_days):
        cutoff = (datetime.now() - timedelta(days=age_days)).isoformat()
        print(f"  - Pruning memories with score < {threshold} older than {age_days} days...")
        try:
            conn = psycopg2.connect(**self.conn_params)
            cur = conn.cursor()
            cur.execute(
                "DELETE FROM em_episodic_memories WHERE score < %s AND timestamp < %s",
                (threshold, cutoff)
            )
            print(f"    Deleted {cur.rowcount} memories.")
            conn.commit()
            cur.close()
            conn.close()
        except Exception as e:
            print(f"    Error pruning memories: {e}")

    def _consolidate_semantic(self):
        # Log-based consolidation for MCP
        log_path = Path(r"e:\genesis-system\data\semantic_memory_log.json")
        if log_path.exists():
            print(f"  - Consolidating semantic logs for MCP sync...")
            # Logic to deduplicate pending entities
            pass

if __name__ == "__main__":
    digestor = MemoryDigestion()
    digestor.digest()
