from __future__ import annotations

import json
from pathlib import Path
from typing import Optional


class EmailService:
    def __init__(self) -> None:
        self.sent_by_key: dict[str, dict] = {}
        self.first_response_lost = True

    def send(self, key: str, payload: dict) -> dict:
        if key not in self.sent_by_key:
            self.sent_by_key[key] = payload
        if self.first_response_lost:
            self.first_response_lost = False
            raise TimeoutError("response_lost_after_side_effect")
        return {"status": "already_sent", "key": key}

    def lookup(self, key: str) -> Optional[dict]:
        payload = self.sent_by_key.get(key)
        return None if payload is None else {"status": "sent", "key": key, "payload": payload}


service = EmailService()
key = "weekly-report-2026-29"
events = []
try:
    service.send(key, {"to": "team@example.invalid", "subject": "weekly"})
except TimeoutError as error:
    events.append({"event": "timeout", "detail": str(error)})

# 未知状态不能盲目重试：先查外部系统。
observed = service.lookup(key)
events.append({"event": "lookup", "result": observed})
if observed is None:
    service.send(key, {"to": "team@example.invalid", "subject": "weekly"})

result = {
    "events": events,
    "external_send_count": len(service.sent_by_key),
    "deduplicated": len(service.sent_by_key) == 1,
    "terminal": "success" if observed and len(service.sent_by_key) == 1 else "failed",
}
assert result["terminal"] == "success"
path = Path(__file__).with_name("experiment-result.json")
path.write_text(json.dumps(result, ensure_ascii=False, indent=2) + "\n")
print(json.dumps(result, ensure_ascii=False, indent=2))
