import asyncio
import types
import src.modules.prompt.controller as controller_module
from src.modules.prompt.schemas.requests import MultiDocumentVerificationRequest

async def test_vehicle_document_verification(monkeypatch):
    raw = {
        "file_type": "vehicle_document",
        "file_urls": [
            "https://example.com/vehicle_card.png"
        ],
        "data": {
            "year": "2020",
            "maker": "Honda",
            "model": "Honda Shine",
            "mileage": "60",
            "value": "10000.00",
            "vehicle_no": "WB051BE2494"
        }
    }
    req = MultiDocumentVerificationRequest.from_raw(raw)

    async def fake_verify_document(file_type, payload, file_url):
        assert file_type == "vehicle_document"
        return {
            "analysis_results": [
                {"field_name": "vehicle_no", "provided_value": payload.get("number"), "found_in_document": "WB051BE2494", "is_match": True, "confidence": "high"},
                {"field_name": "model", "provided_value": payload.get("model"), "found_in_document": "Honda Shine", "is_match": True, "confidence": "high"}
            ],
            "overall_match": True,
            "confidence_score": "92%",
            "document_type": "Vehicle Registration Card",
            "mismatch_summary": [],
            "is_hazy": False,
            "vehicle_details": {
                "extracted_number": "WB051BE2494",
                "extracted_model": "Honda Shine",
                "expiry_date": "2026-12-31",
                "is_expired": False
            }
        }

    monkeypatch.setattr(controller_module.azure_openai_client, "verify_document", fake_verify_document)

    # Fake DB and Request objects
    class _DB: pass
    class _Req: pass
    db = _DB()
    request = _Req()

    resp = await controller_module.verify_multi_documents(db, req, request)
    assert resp.success is True
    assert resp.document_type_detected == "Vehicle Registration Card"
    assert resp.vehicle_details is not None
    assert resp.vehicle_details.get("is_expired") is False
    # Feedback should mark matched fields
    assert "vehicle_no" in resp.feedback.get("fully_matched", [])
    assert "model" in resp.feedback.get("fully_matched", [])
    # Human readable summary should exist for single file
    assert resp.feedback_text is not None and len(resp.feedback_text) > 0
