# 配套文章：05-multimodal-and-realtime.md
# 本轮新增示例未执行；环境和运行方式见上级 GUIDE.md。

# 教学片段的文本与结束时刻是人工对齐的；真实系统要使用实际播放时间或对齐事件。
segments = [
    {"end_ms": 1000, "text": "我需要先核对签收时间。"},
    {"end_ms": 2500, "text": "如果符合质量退货条件，"},
    {"end_ms": 4000, "text": "再判断运费承担方。"},
]
played_ms = 1800
active_response = "response-7"

# 插话使当前响应失效；先更新有效 ID，后来的旧响应事件也不能重新进入播放队列。
cancelled_response = active_response
active_response = None
playback_queue = []  # 模拟清空尚未播放的缓冲；真实应用要调用播放器停止接口。

# 只记录完整播放过的片段。第二段已经播放一部分，但不能宣称整段已被听到。
heard = "".join(part["text"] for part in segments if part["end_ms"] <= played_ms)
history_event = {
    "response_id": cancelled_response,
    "status": "interrupted",
    "played_ms": played_ms,
    "confirmed_complete_text": heard,
    "partial_segment": True,
}
print("历史记录：", history_event)

# 模拟一条取消后迟到的旧事件：响应 ID 不再有效，因此丢弃。
late_event = {"response_id": "response-7", "audio": "旧音频片段"}
if late_event["response_id"] == active_response:
    playback_queue.append(late_event["audio"])
print("剩余播放队列：", playback_queue)
