"""
Test Recall Flow via API - Long Conversation (20 Turns)
"""
import asyncio
import io
import sys

import httpx

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

CONVERSATION = [
    # Giai đoạn 1: Tìm áo sơ mi nam
    "chào shop, tư vấn cho mình nhé",
    "mình muốn tìm áo sơ mi nam mặc đi làm",
    "có màu trắng không?",
    "cái sơ mi trắng đó có chống nhăn không shop?",
    "thế cho mình size L nhé, mình cao 1m75 nặng 72kg",
    
    # Giai đoạn 2: Tìm quần phối & nhảy sang chủ đề mới
    "có quần tây nào hợp với cái áo sơ mi trắng nãy không?",
    "có màu đen dáng slimfit không?",
    "à thôi, mình xem lại, mùa hè nóng quá, có quần short nào mặc nhà mát mát không?",
    "cho mình short chất cotton",
    "mình lấy 2 cái quần short đó",
    
    # Giai đoạn 3: Quay lại hỏi sản phẩm cũ (Test Recall xa)
    "mình hỏi lại cái sơ mi trắng lúc đầu ý",
    "cái đó có màu xanh nhạt không?",
    "thế lấy mình màu xanh nhạt nhé. À mà quần tây đen nãy có size 32 không?",
    "ok, tóm lại nãy giờ mình lấy những gì rồi?",
    
    # Giai đoạn 4: Đổi đối tượng sang đồ trẻ em
    "shop có đồ cho bé gái 5 tuổi không?",
    "bé nhà mình thích váy công chúa màu hồng",
    "chất liệu có mềm không, sợ dặm ngứa",
    "lấy 1 cái váy hồng đó",
    
    # Giai đoạn 5: Chốt đơn
    "vậy tổng cộng có sơ mi, quần short và váy bé gái đúng không?",
    "tính tổng tiền cho mình nhé"
]

API_URL = "http://localhost:5000/api/agent/chat-lead-flow"

async def main():
    device_id = "test_long_conv_device_002"
    headers = {"X-Device-ID": device_id}
    
    print(f"Bắt đầu test 20 turns với Device ID: {device_id}\n")
    
    async with httpx.AsyncClient(timeout=60.0) as client:
        for i, query in enumerate(CONVERSATION):
            print(f"\n{'='*60}")
            print(f"👤 Turn {i+1}: {query}")
            print(f"{'='*60}")
            
            payload = {"user_query": query}
            
            try:
                response = await client.post(API_URL, json=payload, headers=headers)
                data = response.json()
                
                print(f"\n🤖 Bot: {data.get('ai_response', '')}")
                
                products = data.get("products", [])
                if products:
                    print(f"\n📦 Products returned ({len(products)}):")
                    for p in products[:5]:
                        print(f"   - [{p.get('sku', p.get('sku_code', '?'))}] {p.get('name', '?')}")
                else:
                    print("\n📦 No products returned.")
                    
                insight = data.get("user_insight")
                if insight:
                    print(f"\n💾 LATEST_PRODUCT_INTEREST: {insight.get('LATEST_PRODUCT_INTEREST', '')[:200]}")
            except Exception as e:
                print(f"Error calling API: {e}")

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