"""
Mem0 Memory Orchestration Layer
Sits over existing Qdrant + PostgreSQL + Redis stack
Auto-extracts facts from agent sessions, deduplicates, stores per user_id

Provider compatibility (mem0ai 1.0.4):
- LLM provider:     "gemini"  (NOT "google")
- Embedder provider:"gemini"  (NOT "google")
- Qdrant config:    use "url" with https:// prefix + api_key field
"""
import os
from mem0 import Memory

# Qdrant config — ALL values loaded from environment variables (no hardcoded defaults)
# Set these in config/secrets.env or your environment:
#   GENESIS_QDRANT_HOST, GENESIS_QDRANT_PORT, GENESIS_QDRANT_API_KEY


def get_mem0_client():
    gemini_key = os.environ.get("GEMINI_API_KEY_NEW") or os.environ.get("GEMINI_API_KEY")
    qdrant_host = os.environ.get("GENESIS_QDRANT_HOST", "")
    qdrant_port = os.environ.get("GENESIS_QDRANT_PORT", "6333")
    qdrant_api_key = os.environ.get("GENESIS_QDRANT_API_KEY", "")

    if not qdrant_host or not qdrant_api_key:
        raise ValueError(
            "GENESIS_QDRANT_HOST and GENESIS_QDRANT_API_KEY environment variables are required. "
            "Set them in config/secrets.env or your environment."
        )

    # Build https:// URL — Elestio Qdrant requires HTTPS
    qdrant_url = f"https://{qdrant_host}:{qdrant_port}"

    config = {
        "vector_store": {
            "provider": "qdrant",
            "config": {
                "url": qdrant_url,
                "api_key": qdrant_api_key,
                "collection_name": "genesis_mem0_gemini_768",
                "embedding_model_dims": 768
            }
        },
        "llm": {
            "provider": "gemini",
            "config": {
                "model": "gemini-2.0-flash",
                "api_key": gemini_key
            }
        },
        "embedder": {
            "provider": "gemini",
            "config": {
                "model": "gemini-embedding-001",
                "api_key": gemini_key
            }
        }
    }
    return Memory.from_config(config)


def add_session_memory(session_transcript: str, user_id: str, agent_id: str = "genesis"):
    """Call at end of every agent session to extract + store memories"""
    m = get_mem0_client()
    result = m.add(session_transcript, user_id=user_id, agent_id=agent_id)
    return result


def query_memories(query: str, user_id: str, top_k: int = 5):
    """Query memories for a user before task execution"""
    m = get_mem0_client()
    return m.search(query, user_id=user_id, limit=top_k)


def get_all_memories(user_id: str):
    m = get_mem0_client()
    return m.get_all(user_id=user_id)


if __name__ == "__main__":
    import sys, json
    if "--test" in sys.argv:
        print("=== Mem0 Integration Test ===")
        print("Building client (Gemini LLM + Gemini Embed + Qdrant HTTPS)...")
        try:
            m = get_mem0_client()
            print("Client built OK.")
            print("\nAdding test memory...")
            result = m.add(
                "Test memory: Genesis uses Gemini 2.0 Flash for computer use tasks. "
                "ReceptionistAI targets Australian tradies at $497/mo. "
                "Session 58 had voice widget go LIVE.",
                user_id="genesis_test"
            )
            print(json.dumps(result, indent=2, default=str))
            print("\nSearching memories for 'Gemini'...")
            results = m.search("Gemini", user_id="genesis_test")
            print(json.dumps(results, indent=2, default=str))
        except Exception as e:
            print(f"ERROR: {e}")
            import traceback
            traceback.print_exc()
