import asyncio
import logging
import sys
from pathlib import Path

logging.basicConfig(level=logging.INFO, format="%(message)s")

sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

from app.modules.takeoff.application.service import get_drawing_takeoff_service


async def main():
    drawing_file = Path(
        r"C:\Projects\DSCons\HĐ-2026\Kênh Ông Đèn\Kenh Ong Den_ban ve.pdf"
    )
    hsmt_file = Path(r"C:\Projects\DSCons\HĐ-2026\Kênh Ông Đèn\Biểu_mẫu_mời_thầu.pdf")

    svc = get_drawing_takeoff_service()

    payload = svc.create_pending_takeoff(
        file_path=drawing_file,
        filename=drawing_file.name,
        drawing_hint="Cống Kênh Ông Đen toàn tập",
    )
    takeoff_id = payload["id"]

    print("Running pipeline with Full files & 2026 SOTA models... please wait...\n")
    result = await svc.run_takeoff_pipeline(
        takeoff_id=takeoff_id,
        drawing_hint="Cống Kênh Ông Đen",
        attached_hsmt_path=str(hsmt_file),
        attached_hsmt_filename=hsmt_file.name,
    )

    takeoff = svc._erp_client.get_drawing_takeoff(takeoff_id)
    items = svc._erp_client.list_drawing_takeoff_items(takeoff_id)

    print("\n=== TAKEOFF RESULTS ===")
    print("Status:", takeoff.get("takeoff_status"))
    print(
        "Total Cost:", f"{float(takeoff.get('total_estimated_cost_vnd', 0)):,.0f} VND"
    )
    print(
        "Confidence:",
        f"{takeoff.get('confidence_level')} ({takeoff.get('confidence_score')}%)",
    )
    print("\n[AI Tùng (Giám đốc) Phán Quyết]")
    print(takeoff.get("ai_report_message"))
    print("\n[Items]")
    for item in items:
        print(
            f"- {item.get('item_name')} | {item.get('quantity')} {item.get('unit')} | {float(item.get('total_amount_vnd', 0)):,.0f} VND"
        )

    print("\n=== OPENROUTER API COST TRACKING ===")
    try:
        total_usd = svc._llm_client.session_cost_usd
        pt = svc._llm_client.session_tokens["prompt"]
        ct = svc._llm_client.session_tokens["completion"]
        print(f"Total Prompt Tokens: {pt:,}")
        print(f"Total Completion Tokens: {ct:,}")
        print(f"Total API Cost (USD): ${total_usd:.6f}")
        print(f"Total API Cost (VND): {total_usd * 25500:,.0f} VND")
    except AttributeError:
        print("Cost tracking not found on LLMClient.")


if __name__ == "__main__":
    asyncio.run(main())
