import os
import hashlib

def get_version(file):
    
    f = open(file, "r")
    lines = f.readlines()
    f.close()

    for version in lines:

        version = version.replace("const", "")
        version = version.replace("VERSION", "")
        version = version.replace("=", "")
        version = version.replace("\"", "")
        version = version.replace(";", "")
        version = version.replace(" ", "")

        return version
   
def get_all_paths(folder):
   
   paths = dict()

   for dirpath, dir , filenames in os.walk(folder):
      
      for f in filenames:
         
         k = os.path.abspath(os.path.join(dirpath, f))
         paths[k] = ""
            
   paths = dict(sorted(paths.items()))
   
   return paths

def get_hash(filename: str, *, buffer_size: int = 65536) -> str:
    
   hash = hashlib.sha1()
   
   with open(filename, "rb") as in_file:
      
      while chunk := in_file.read(buffer_size):
      
         hash.update(chunk)
    
   return hash.hexdigest()

def get_folder_hash(dir):
   
   files = get_all_paths(dir)
   
   for file in files:
      files[file] = get_hash(file)


   hash = hashlib.sha1()

   for file in files:
      hash.update(files[file].encode())
   
   return hash.hexdigest()

hashes = dict()
versions = dict()

for dirpath, directory, filenames in os.walk(os.getcwd()):
    
   for dir in directory:

      hashes[dir] = ""
      
      if dir != "assets" and dir != "common" and dir != "common2":

         file = dirpath + "\\" + dir + "\\" + "src" + "\\" + "Version.js"
         versions[dir] = get_version(file)

   hashes = dict(sorted(hashes.items()))

   for dir, value in hashes.items():
       
      hash = get_folder_hash(dir)

      if dir == "assets" or dir == "common":
   
         hashes[dir] = hash

      else:
   
         fhash = hashlib.sha1()

         fhash.update(hashes["assets"].encode())
         fhash.update(hashes["common"].encode())
         fhash.update(hash.encode())
         hashes[dir] = fhash.hexdigest()

   break

with open("sha-1_digests.txt", "w") as f:  
   
   for key, value in hashes.items():  
   
      if key != "assets":

         if key == "common":
   
            f.write('%s:\t\t\t%s\n' % ("Coinrain Jackpot", value))

         elif key == "common2":

            pass

         else:
   
            f.write('%s:\t\t\t%s\t\t\t%s\n' % (key, value, versions[key]))