import pytest
from src.modules.prompt.schemas.requests import MultiDocumentVerificationRequest
from src.modules.prompt.controller import verify_multi_documents

class DummyRequest:
    pass

class DummySession:
    pass

@pytest.mark.asyncio
async def test_feedback_residence_documents(monkeypatch):
    raw = {
        "file_type": "residence_documents",
        "file_urls": ["https://example.com/doc1.jpg"],
        "data": {
            "first_name": "John",
            "middle_name": "",
            "last_name": "Doe",
            "city": "Sample City",
            "state": "CA",
            "county": "USA",
            "zip_code": "90001",
            "street_name": "Main Street",
            "house_number": "100"
        }
    }
    req = MultiDocumentVerificationRequest.from_raw(raw)

    async def fake_verify_document(file_type, payload, file_url):
        return {
            "analysis_results": [
                {"field_name": "first_name", "provided_value": payload["first_name"], "found_in_document": payload["first_name"], "is_match": True, "confidence": "high"},
                {"field_name": "last_name", "provided_value": payload["last_name"], "found_in_document": payload["last_name"], "is_match": True, "confidence": "high"},
                {"field_name": "city", "provided_value": payload["city"], "found_in_document": "Samp City", "is_match": False, "confidence": "medium"},
                {"field_name": "house_number", "provided_value": payload["house_number"], "found_in_document": None, "is_match": False, "confidence": "low"}
            ],
            "overall_match": False,
            "confidence_score": "70%",
            "document_type": "Utility Bill",
            "is_hazy": False
        }

    from src.modules.prompt import controller as controller_module
    monkeypatch.setattr(controller_module.azure_openai_client, "verify_document", fake_verify_document)

    resp = await verify_multi_documents(DummySession(), req, DummyRequest())
    assert resp.feedback is not None
    assert set(resp.feedback['fully_matched']) == {"first_name", "last_name"}
    assert set(resp.feedback['partially_matched']) == {"city"}
    assert set(resp.feedback['not_matched']) == {"house_number"}
