import asyncio
import json
import sys
from simulate_all import PureVectorEmbedder, qdrant_score
from inspect_mem0 import inspect_live_mem0

if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8", errors="replace")

async def test_q6():
    dscons_mems, non_dscons_mems = await inspect_live_mem0()
    embedder = PureVectorEmbedder()
    
    embedded_non_dscons = []
    for m in non_dscons_mems:
        v = embedder.embed(m.get("memory", ""))
        embedded_non_dscons.append((m, v))
        
    query = "database precision"
    qv = embedder.embed(query)
    
    text_base = r"""[DSCons Backend Architecture: Database Precision & Double-Entry Ledger] Trong CSDL PostgreSQL và mã nguồn Python của DSCons ERP, TUYỆT ĐỐI CẤM sử dụng kiểu FLOAT hoặc DOUBLE cho tiền tệ VNĐ và khối lượng bóc tách BoQ. Bắt buộc sử dụng kiểu NUMERIC(18, 4) hoặc BIGINT trong PostgreSQL và kiểu Decimal trong Python. Mọi biến động tài chính, hạn mức ngân sách và kho vật tư áp dụng cơ chế Sổ kép (Double-entry ledger) bất biến kèm khóa Optimistic/Pessimistic Locking."""
    score_base = qdrant_score(qv, embedder.embed(text_base))
    print(f"Base score: {score_base:.4f}")
    
    text_boost_b02 = r"""[DSCons Backend Architecture: Database Precision & Financial Ledgers | Database Precision Decimal Arithmetic | PostgreSQL NUMERIC(18, 4) & Double-Entry Ledger | CSDL Độ Chính Xác Số Thực Database Precision] Trong CSDL PostgreSQL database precision và mã nguồn Python của DSCons ERP, TUYỆT ĐỐI CẤM sử dụng kiểu số thực FLOAT hoặc kiểu DOUBLE khi lưu trữ tiền tệ VNĐ và khối lượng bóc tách BoQ. Bắt buộc sử dụng kiểu NUMERIC(18, 4) hoặc BIGINT trong PostgreSQL và kiểu Decimal trong Python đảm bảo database precision tuyệt đối. Mọi biến động tài chính, hạn mức ngân sách và kho vật tư áp dụng cơ chế Sổ kép (Double-entry ledger) bất biến kèm khóa Optimistic/Pessimistic Locking."""
    score_boost_b02 = qdrant_score(qv, embedder.embed(text_boost_b02))
    print(f"Boosted RULE-BACKEND-02 score: {score_boost_b02:.4f}")

    # Let's also check RULE-BACKEND-01
    text_boost_b01 = r"""[DSCons Backend Architecture: 4-Layer Clean Architecture & DDD | Backend Database Infrastructure & Repositories | Ranh Giới 4 Tầng Backend Architecture] Backend DSCons cấu trúc 4 tầng nghiêm ngặt: (1) Presentation (FastAPI Routers chỉ validate Pydantic schema và ủy quyền); (2) Application (Use Cases, Command/Query Handlers giao tiếp qua Domain Ports); (3) Domain Core (Entities, Value Objects, Protocols hoàn toàn độc lập 0% phụ thuộc framework/DB/database); (4) Infrastructure (Repositories, Adapters đóng gói SQL database precision, persistence và external HTTP clients). Code phải vượt qua pytest test_architecture_boundary_enforcement.py."""
    score_boost_b01 = qdrant_score(qv, embedder.embed(text_boost_b01))
    print(f"Boosted RULE-BACKEND-01 score: {score_boost_b01:.4f}")

    # Top non-dscons
    scored = [(qdrant_score(qv, mv), m.get("memory", "")[:60]) for m, mv in embedded_non_dscons]
    scored.sort(key=lambda x: x[0], reverse=True)
    print("Top non-dscons hit:", scored[0])
    print("2nd non-dscons hit:", scored[1])

if __name__ == "__main__":
    asyncio.run(test_q6())
