import json
from kl_mcp_client.tools import MCPTools

def main():
    # 1. Khởi tạo và Kết nối Server
    tools = MCPTools()
    tools.connect_mcp("http://localhost:8080")
    print("🚀 Đã lập kết nối MCP")

    # 2. Tạo phiên hoạt động
    resp = tools.create_session("ws://localhost:9222")
    sid = resp["sessionId"]
    print(f"📦 Khởi tạo phiên: {sid}")

    # 3. Điều hướng đến một trang TMĐT (Ví dụ: Tiki, Shopee...)
    tools.open_page(sid, "https://tiki.vn/search?q=laptop")
    print("🌐 Đang truy cập Tiki tìm Laptop...")

    # 4. Đợi kết quả tìm kiếm tải xong
    tools.wait_for_selector(sid, ".product-item")
    print("⏳ Kết quả tìm kiếm đã sẵn sàng")

    # 5. Thực thi Luồng trích xuất dữ liệu lớn (Streaming All) ⭐
    # Đây là cách hiệu quả nhất để lấy hàng trăm sản phẩm
    print("📊 Bắt đầu trích xuất luồng dữ liệu (Streaming Mode)...")
    
    # Biểu thức JS sẽ trả về mảng các đối tượng sản phẩm
    js_expression = """
    Array.from(document.querySelectorAll('.product-item')).map(el => ({
        title: el.querySelector('.name')?.innerText,
        price: el.querySelector('.price-discount__price')?.innerText,
        link: el.querySelector('a')?.href
    }))
    """

    # Lấy tối đa 100 sản phẩm, chia nhỏ mỗi lần kéo (chunk) là 20 sản phẩm
    products = tools.evaluate_stream_all(
        sessionId=sid, 
        expression=js_expression, 
        chunkSize=20, 
        max_items=100
    )

    # 6. Hiển thị tổng quan kết quả
    print(f"✅ Đã thu thập được {len(products)} sản phẩm thông qua luồng dữ liệu.")
    
    if products:
        print("\n📦 3 Sản phẩm đầu tiên trong danh sách:")
        print(json.dumps(products[:3], indent=4, ensure_ascii=False))

    # 7. Giải phóng tài nguyên
    tools.close_session(sid)
    print("\n✅ Luồng trích xuất hoàn tất")

if __name__ == "__main__":
    main()
