import sys
import os
from pathlib import Path
sys.path.append(str(Path(__file__).parent.parent))

from src.mcp_client import ts_cpp_get_definition, ts_cpp_get_signature, ts_cpp_get_code_outline
from src.aggregate import build_tier3_context

def test_ast_masking_gencpp_samples():
    ast_hpp = "tests/assets/gencpp_samples/ast.hpp"
    
    # 1. Verify we can get a complex definition despite forward declarations
    # Currently it might return the forward declaration, let's check
    defn = ts_cpp_get_definition(ast_hpp, "AST")
    print(f"--- AST Definition (len {len(defn)}) ---")
    print(defn[:100] + "...")
    
    # 2. Test Masking logic in aggregation
    item = {
        "path": Path(ast_hpp),
        "entry": ast_hpp,
        "content": Path(ast_hpp).read_text(encoding="utf-8"),
        "ast_mask": {"AST": "def", "Code::append": "sig"},
        "auto_aggregate": True,
        "force_full": False,
        "tier": None
    }
    
    res = build_tier3_context([item], Path("."), [], [], [])
    print("--- MASKED AGGREGATION RESULT ---")
    # Search for Code::append signature in result
    if "forceinline void       append(Code other)" in res:
        print("SUCCESS: Code::append signature found!")
    else:
        print("FAILURE: Code::append signature NOT found!")
        # Print a bit of what IS there
        print(res[2800:3500])
    
    assert "(Masked)" in res
    assert "struct AST" in res
    assert "forceinline void       append(Code other)" in res

if __name__ == "__main__":
    test_ast_masking_gencpp_samples()
