"""模拟响应丢失；不真的等待、不调用支付，也不声明端到端 exactly-once。"""
from approval_runtime import Approval, Draft, Ledger, approve


def send_and_lose_response(ledger: Ledger, draft: Draft, approval: Approval) -> None:
    # 模拟后端已记录结果，但调用方接收响应失败。
    ledger.submit(draft, approval, now=1, authorized=True, eligible=True)
    raise TimeoutError("模拟：请求方未收到响应，业务结果未知")


if __name__ == "__main__":
    ledger = Ledger()
    draft = Draft("shop-a", "user-417", "refund-op-9", "A1042", 10000)
    approval = approve(draft, {"approved": True}, now=0)
    try:
        send_and_lose_response(ledger, draft, approval)
    except TimeoutError:
        # 查询同一业务操作，不重新生成随机操作 ID 再次退款。
        result = ledger.lookup(draft.tenant, draft.user, draft.operation_id)
        print({"recovered_receipt": result})
