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_per_file_results_presence(monkeypatch):
    raw = {
        "file_type": "residence_documents",
        "file_urls": ["https://example.com/doc1.jpg", "https://example.com/doc2.jpg"],
        "data": {
            "first_name": "John",
            "middle_name": "",
            "last_name": "Doe",
            "city": "CityX",
            "state": "StateY",
            "county": "CountryZ",
            "zip_code": "12345",
            "street_name": "Road 1",
            "house_number": "9A"
        }
    }
    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": "Mismatch", "is_match": False, "confidence": "medium"}
            ],
            "overall_match": False,
            "confidence_score": "60%",
            "document_type": "ID Card",
            "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.per_file_results is not None
    assert len(resp.per_file_results) == 2
    urls = [p['file_url'] for p in resp.per_file_results]
    assert urls == raw['file_urls']
    for pf in resp.per_file_results:
        assert 'analysis_results' in pf and isinstance(pf['analysis_results'], list)
