import asyncio
import sys

from app.modules.takeoff.application.drawing_takeoff_service import DrawingTakeoffService

if sys.stdout and hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8")


async def test_dynamic_takeoffs():
    service = DrawingTakeoffService()

    drawings = [
        (
            "NVH - DAI THANG 27-6-20_TD_ba1bf304.dwg",
            "Nhà văn hóa thôn Đại Thắng",
            "Dân dụng & Văn hóa",
        ),
        ("CONG_HOP_BEN_KEM_K2+150.dwg", "Cống hộp Bến Kem đoạn K2+150", "Thủy lợi"),
        ("KE_DA_DO_K3_200.pdf", "Kè kênh Đa Độ Hải Phòng", "Thủy lợi"),
        (
            "DUONG_GIAO_THONG_KIEN_MINH.dwg",
            "Mặt đường giao thông Kiến Minh",
            "Giao thông",
        ),
    ]

    for fn, hint, ptype in drawings:
        print(f"\n==================== TESTING: {fn} ====================")
        result = await service.analyze_drawing_with_vision(
            image_base64="",
            filename=fn,
            text_layer="",
            project_type=ptype,
            drawing_hint=hint,
        )
        print(f"Drawing Code: {result['drawing_code']}")
        print(f"Title: {result['drawing_title']}")
        print(f"Type: {result['drawing_type']}")
        print(f"Notes: {result['ai_analysis_notes']}")
        print(f"Items Count: {len(result['items'])}")
        total_vnd = sum(float(itm["total_amount_vnd"]) for itm in result["items"])
        print(f"Total Amount: {total_vnd:,.0f} VNĐ")
        for itm in result["items"][:3]:
            print(
                f"  - [{itm['wbs_code']}] {itm['item_name']} | Qty: {itm['quantity']} {itm['unit']} | Formula: {itm['dimension_formula']} | Total: {itm['total_amount_vnd']:,.0f} đ"
            )


if __name__ == "__main__":
    asyncio.run(test_dynamic_takeoffs())
