import io

edits = [
    (
        "crates/spt-daemon/src/brain.rs",
        [
            "        let err = brain",
            "            .read_event()",
            '            .expect_err("the strict controller path fatals a forward gap");',
        ],
        [
            "        let deadline = brain.call_deadline();",
            "        let err = brain",
            "            .read_event_until(deadline)",
            '            .expect_err("the strict controller path fatals a forward gap");',
        ],
    ),
    (
        "crates/spt-daemon/src/brain.rs",
        [
            "        let err = brain",
            "            .read_event()",
            '            .expect_err("the ring rolled past the floor — still a gap");',
        ],
        [
            "        let deadline = brain.call_deadline();",
            "        let err = brain",
            "            .read_event_until(deadline)",
            '            .expect_err("the ring rolled past the floor — still a gap");',
        ],
    ),
    (
        "crates/spt-daemon/tests/resume.rs",
        [
            "fn read_session_until(brain: &mut Brain, want_sid: u64, needle: &[u8], buf: &mut Vec<u8>) {",
            "    while !contains(buf, needle) {",
            "        match brain",
            "            .read_event()",
            '            .expect("resume read_event (no gap-reject)")',
        ],
        [
            "fn read_session_until(brain: &mut Brain, want_sid: u64, needle: &[u8], buf: &mut Vec<u8>) {",
            "    let deadline = brain.call_deadline();",
            "    while !contains(buf, needle) {",
            "        match brain",
            "            .read_event_until(deadline)",
            '            .expect("resume read_event (no gap-reject)")',
        ],
    ),
]

for path, old, new in edits:
    raw = io.open(path, "r", encoding="utf-8", newline="").read()
    nl = "\r\n" if "\r\n" in raw else "\n"
    o = nl.join(old)
    n = nl.join(new)
    assert raw.count(o) == 1, (path, raw.count(o), old[0])
    raw = raw.replace(o, n, 1)
    io.open(path, "w", encoding="utf-8", newline="").write(raw)
    print("patched", path, "|", old[0].strip()[:50])
