"""
Test lưu nhiều conversation history vào DB
"""

import asyncio
import sys
from datetime import datetime, timedelta, timezone
from pathlib import Path

sys.path.insert(0, str(Path(__file__).parent.parent))

from common.conversation_manager import get_conversation_manager


async def test_save_histories():
    """Test lưu nhiều conversations"""

    vietnam_tz = timezone(timedelta(hours=7))
    now = datetime.now(vietnam_tz)

    print("=" * 70)
    print("💾 TEST SAVE MULTIPLE CONVERSATION HISTORY")
    print("=" * 70)
    print(f"Current Time: {now.strftime('%Y-%m-%d %H:%M:%S')} +07:00")
    print()

    try:
        manager = await get_conversation_manager()

        # Test user identity
        test_user = f"user_test_{now.strftime('%Y%m%d_%H%M%S')}"

        # Danh sách conversations để test
        conversations = [
            {
                "human": "Cho tôi xem áo thun nam màu đen size M",
                "ai": "Dạ, hiện tại Canifa có 5 mẫu áo thun nam màu đen size M. Bạn muốn xem loại nào ạ?",
            },
            {
                "human": "Giá từ 200k đến 500k",
                "ai": "Vâng ạ, có 3 mẫu trong khoảng giá đó:\n1. Áo thun cotton USA - 299k\n2. Áo thun Bamboo - 399k\n3. Áo thun Premium - 450k",
            },
            {
                "human": "Cho tôi xem mẫu Bamboo",
                "ai": "Áo thun Bamboo 399k có các đặc điểm:\n- Chất liệu: 60% Cotton + 40% Bamboo\n- Thoáng mát, thấm hút tốt\n- Màu đen trơn, không phai\n- Có size M, L, XL",
            },
            {
                "human": "Còn hàng không?",
                "ai": "Dạ còn hàng ạ. Size M còn 15 sản phẩm tại kho Hà Nội và 8 sản phẩm tại kho TP.HCM.",
            },
            {
                "human": "Cho tôi địa chỉ cửa hàng gần nhất",
                "ai": "Bạn ở khu vực nào ạ? Canifa có nhiều cửa hàng:\n- Hà Nội: 25+ cửa hàng\n- TP.HCM: 18+ cửa hàng\n- Các tỉnh khác: 50+ cửa hàng",
            },
        ]

        print(f"👤 Test User: {test_user}")
        print(f"📝 Saving {len(conversations)} conversation turns...")
        print()

        # Lưu từng conversation
        for idx, conv in enumerate(conversations, 1):
            await manager.save_conversation_turn(
                identity_key=test_user, human_message=conv["human"], ai_message=conv["ai"]
            )
            print(f"✅ [{idx}/{len(conversations)}] Saved:")
            print(f"   👨 Human: {conv['human'][:50]}...")
            print(f"   🤖 AI: {conv['ai'][:50]}...")
            # Small delay để có timestamp khác nhau
            await asyncio.sleep(0.1)

        print()
        print("=" * 70)
        print("🔍 RETRIEVING SAVED HISTORY...")
        print("=" * 70)

        # Retrieve toàn bộ history
        history = await manager.get_chat_history(test_user, limit=100)

        if history:
            print(f"✅ Retrieved {len(history)} messages (should be {len(conversations) * 2}):")
            print()

            for idx, msg in enumerate(history, 1):
                timestamp = msg["timestamp"]
                role = "👨 Human" if msg["is_human"] else "🤖 AI"
                message = msg["message"][:60] + "..." if len(msg["message"]) > 60 else msg["message"]

                print(f"[{idx:2d}] {timestamp} | {role}")
                print(f"     {message}")
                print()

            print("=" * 70)
            print("✅✅✅ TEST COMPLETED SUCCESSFULLY!")
            print(f"Total messages saved: {len(history)}")
            print("All timestamps in Vietnam timezone (+07:00)")
        else:
            print("❌ No history found!")

    except Exception as e:
        print(f"❌ Error: {e}")
        import traceback

        traceback.print_exc()

    print("=" * 70)


if __name__ == "__main__":
    if sys.platform == "win32":
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    asyncio.run(test_save_histories())
