import subprocess
import platform
import sys
import os
import time
import shutil
import zipfile

root = os.path.abspath(sys.path[0])
builds = os.path.join(root, "Build")
combined = os.path.join(builds, "Combined")
outputjar = "CustomWindowTitle.jar"

gradlew = "gradlew.bat" if platform.system() == "Windows" else "gradlew"

def build(folder):
    separator = "========={}".format("=" * len(folder))
    
    print(separator)
    print("Building {}".format(folder))
    print(separator)
    
    libs = os.path.join(root, folder, "build", "libs")
    shutil.rmtree(libs)
    
    os.chdir(os.path.join(root, folder))
    subprocess.run([gradlew, "build"])
    
    for fname in os.listdir(libs):
        if "-dev" not in fname:
            global outputjar
            outputjar = fname
            
            jar = os.path.join(builds, "{}.{}".format(folder, fname))
            shutil.copyfile(os.path.join(libs, fname), jar)
            
            jar = zipfile.ZipFile(jar)
            jar.extractall(combined)
            jar.close()
            
            break

if os.path.isdir(builds):
    shutil.rmtree(builds)
    time.sleep(0.25)

os.mkdir(builds)
os.mkdir(combined)

# Forge must run last to overwrite MANIFEST.MF
build("Fabric")
build("Forge")

os.chdir(builds)

with zipfile.ZipFile(outputjar, "w", compression = zipfile.ZIP_DEFLATED, compresslevel = 9) as jar:
    for root, dirs, files in os.walk(combined):
        for fname in files:
            fname = os.path.join(root, fname)
            fname = os.path.normpath(fname)
            jar.write(fname, os.path.relpath(fname, combined))