#!/usr/bin/env python

from argparse import ArgumentParser
from hashlib import sha512
from logging import basicConfig, DEBUG
from pathlib import Path
from sys import argv, exit


argparser = ArgumentParser(description='sha512sum replacement if coreutils isn\'t installed')
argparser.add_argument('-c', '--check', type=Path, required=True)

if __name__ == '__main__':
    basicConfig(level=DEBUG)
    args = argparser.parse_args()
    errors = 0
    with open(str(args.check.resolve()), 'rt') as f:
        for line in f:
            expected_hash, filename = line.rstrip('\r\n').split('  ', 1)
            with open(str(Path(filename).resolve()), 'rb') as f:
                actual_hash = sha512(f.read()).hexdigest()

            if expected_hash == actual_hash:
                print(filename + ': OK')
            else:
                errors += 1
                print(filename + ': FAILED')

    if errors:
        print('%s: WARNING: %s computed checksum did NOT match' % (argv[0], errors))
        exit(1)
    else:
        exit(0)
