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

class DummyRequest:  # minimal placeholder
    pass

class DummySession:  # placeholder for db session
    pass

@pytest.mark.asyncio
async def test_verify_multi_documents_join(monkeypatch):
    raw = {
        "file_type": "bank_statement",
        "file_urls": [
            "https://example.com/a.pdf",
            "https://example.com/b.pdf"
        ],
        "data": {
            "first_name": "MP",
            "middle_name": "",
            "last_name": "Convergent",
            "bank_name": "Bank of America",
            "account_type": "Saving",
            "balance": "10000.00"
        }
    }
    req = MultiDocumentVerificationRequest.from_raw(raw)

    # Stub azure_openai_client.verify_document to prevent external call
    async def fake_verify_document(file_type, payload, file_url):
        # Return minimal valid structure for bank_statement path
        return {
            "bank_statement_results": [
                {
                    "months_covered": [],
                    "missing_months": [],
                    "balances": [],
                    "provided_final_balance": payload.get("balance"),
                    "statement_final_balance": payload.get("balance"),
                    "final_balance_matches": True,
                    "months_complete": True,
                    "name_matches": {"first_name": True, "middle_name": True, "last_name": True},
                    "bank_name_matches": True,
                    "account_type_matches": True,
                    "errors": []
                } for _ in file_url.split(',')
            ]
        }
    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.success is True
    assert resp.bank_statement_results is not None
    assert len(resp.original_file_urls) == 2
    assert resp.original_file_urls[0] == raw["file_urls"][0]
