"""Paranda WAV-failid, mille päis jäi kirjutamata (salvesti tapeti keset lugu). Kasutus: python fix_wav.py <kaust>"""
import struct, sys, wave
from pathlib import Path


def fix(path):
    data = path.read_bytes()
    if len(data) < 44:
        return False
    riff_size, data_size = struct.unpack_from("<I", data, 4)[0], struct.unpack_from("<I", data, 40)[0]
    real = len(data) - 44
    if data_size == real or data_size not in (0, 0xFFFFFFFF) and abs(data_size - real) < 8:
        return False
    hdr = bytearray(data[:44])
    struct.pack_into("<I", hdr, 4, real + 36)
    struct.pack_into("<I", hdr, 40, real)
    path.write_bytes(bytes(hdr) + data[44:])
    return True


if __name__ == "__main__":
    d = Path(sys.argv[1])
    for p in list(d.glob("*.wav")) + list((d / "_short").glob("*.wav")):
        try:
            with wave.open(str(p)) as w:
                w.getnframes()
            continue
        except Exception:
            print("parandan:", p.name, fix(p))
