#!/usr/bin/python3

archs = ["i386", "amd64"]

suffixes = {}
suffixes["lmde2"] = "betsy"
suffixes["lmde3"] = "cindy"
suffixes["lmde4"] = "debbie"
suffixes["lmde5"] = "elsie"
suffixes["lmde6"] = "faye"
suffixes["mint19"] = "tara"
suffixes["mint19.1"] = "tessa"
suffixes["mint19.2"] = "tina"
suffixes["mint19.3"] = "tricia"
suffixes["mint20"] = "ulyana"
suffixes["mint20.1"] = "ulyssa"
suffixes["mint20.2"] = "uma"
suffixes["mint20.3"] = "una"
suffixes["mint21"] = "vanessa"
suffixes["mint21.1"] = "vera"
suffixes["mint21.2"] = "victoria"
suffixes["mint21.3"] = "virginia"
suffixes["mint22"] = "wilma"
suffixes["mint22.1"] = "xia"

# Releases which only support 64-bit
only_64bit_releases = ["mint20", "mint20.1", "mint20.2", "mint20.3", "mint21", "mint21.1", "mint21.2", "mint21.3", "mint22", "mint22.1"]

import sys
import os
import argparse

def call(command, exit_on_failure=True):
    return_code = os.system(command)
    if return_code != 0 and exit_on_failure:
        print("ERROR: '%s' exited with return code %d" % (command, return_code))
        sys.exit(1)

parser = argparse.ArgumentParser(description='Build packages via Docker')
parser.add_argument("-d", "--distributions", help="Distributions (comma separated)", default="mint19,lmde3")
parser.add_argument("-n", "--without-suffix", help="No suffix", action='store_true', required=False)
parser.add_argument("-g", "--git-repositories", help="Git clone URLs, or project names (for Mint projects on Github) (comma separated). . Suffix each repo with #tagname or #branchname to specify a branch or a tag to build from.", required=False)
args = parser.parse_args()

distributions = args.distributions.split(",")

if os.path.exists("docker-output"):
    os.system("rm -rf docker-output")

if os.path.exists("docker-output.tar"):
    os.system("rm -f docker-output.tar")

if args.git_repositories is not None:
    repositories = args.git_repositories.split(",")
    for repository in repositories:
        for distribution in distributions:
            for arch in archs:
                if arch == "i386" and distribution in only_64bit_releases:
                    continue
                docker_image = "linuxmintd/%s-%s" % (distribution, arch)
                cmd = "mint-docker-build -i %s" % docker_image
                if not args.without_suffix:
                    cmd = "%s -s +%s" % (cmd, suffixes[distribution])
                os.system("%s -g %s" % (cmd, repository))
else:
    for distribution in distributions:
        for arch in archs:
            if arch == "i386" and distribution in only_64bit_releases:
                continue
            docker_image = "linuxmintd/%s-%s" % (distribution, arch)
            cmd = "mint-docker-build -i %s" % docker_image
            if not args.without_suffix:
                cmd = "%s -s +%s" % (cmd, suffixes[distribution])
            os.system(cmd)

os.chdir("docker-output")
for dir_name in os.listdir("."):
    if os.path.isdir(dir_name) and dir_name.startswith("linuxmintd_"):
        name = dir_name.replace("linuxmintd_", "")
        (distribution, arch) = name.split("-")
        if arch == "amd64":
            os.system("mv %s %s" % (dir_name, distribution))
        else:
            os.system("mkdir -p %s" % distribution)
            os.system("mv %s %s/i386" % (dir_name, distribution))

os.chdir("..")
os.system("tar cvf docker-output.tar docker-output")
