# coding: utf-8

import hashlib
import os


def md5(file_path):
    ''' Generate md5 hash. '''
    hash_md5 = hashlib.md5()
    with open(file_path, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()


def create_file_md5(file_path):
    ''' Get md5_file_hash of file and store to md5 file. '''
    md5_file_path = f'{file_path}.md5'
    md5_file_hash = md5(file_path)
    # create md5_file
    if not os.path.isfile(md5_file_path):
        with open(md5_file_path, 'w', encoding='utf-8') as md5_file:
            md5_file.write(md5_file_hash)
    else:
        with open(md5_file_path, 'r', encoding='utf-8') as md5_file:
            md5_file_stored = md5_file.read()
        # check md5_file
        assert md5_file_hash == md5_file_stored, (
            "Mosel's md5 don't matched with stored %s.md5 file", file_path)
    return md5_file_hash
