import sys, shutil
root = r'C:\Users\decid\Documents\projects\spt-core\.worktrees\w6-divulge' + '\\'
muts = [
    ('crates/spt/src/api/nowsignal.rs', 'if m.new != version || m.old.trim().is_empty()', 'if m.old.trim().is_empty()'),
    ('crates/spt/src/api/nowsignal.rs', 'update_row(label, version, applies.get(subject), &chrono::Local)', 'update_row(label, version, None::<&spt_daemon::SubjectApply>.or(applies.get("__none__")), &chrono::Local)'),
    ('crates/spt/src/cli.rs', '        None => Vec::new(),\n        Some(spt_daemon::ReleaseKeysOverride::Parsed {', '        None => vec![hint.clone()],\n        Some(spt_daemon::ReleaseKeysOverride::Parsed {'),
    ('crates/spt/src/cli.rs', 'O::AppliedPending { product_version, .. } | O::AppliedDaemonless { product_version, .. } => {', 'O::AppliedPending { product_version, .. } | O::AppliedDaemonless { product_version, .. } | O::AlreadyApplied { product_version, .. } => {'),
    ('crates/spt/src/cli.rs', '        (true, Some((node, port))) => {', '        (_, Some((node, port))) => {'),
]
mode = sys.argv[1]
for rel in {m[0] for m in muts}:
    p = root + rel
    if mode == 'apply':
        shutil.copy(p, p + '.mutbak')
    else:
        shutil.move(p + '.mutbak', p)
if mode == 'apply':
    for rel, a, n in muts:
        p = root + rel
        b = open(p, 'rb').read(); crlf = b'\r\n' in b
        s = b.decode().replace('\r\n', '\n')
        if s.count(a) != 1:
            sys.exit(f'{rel}: {s.count(a)} for {a!r}')
        s = s.replace(a, n)
        if crlf: s = s.replace('\n', '\r\n')
        open(p, 'wb').write(s.encode())
print(mode, 'ok')
