#!/usr/bin/python3

import sys
import os
import argparse
import json
from rich.console import Console
from rich.panel import Panel
from rich.text import Text

console = Console()

with open("/usr/share/mint-dev-tools/release-info.json") as file_handle:
    release_info = json.load(file_handle)

suffixes = release_info["releases"]

def call(command, exit_on_failure=True):
    return_code = os.system(command)
    if return_code != 0 and exit_on_failure:
        console.print("[bold red]Build failed[/bold red] (exit code %d)" % return_code)
        console.print(Panel(Text(command), border_style="red"))
        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:
            if ((distribution.startswith("mint") and float(distribution[4:]) >= 20) or
                    (distribution.startswith("lmde") and float(distribution[4:]) >= 7)):
                archs = ["amd64"]
            else:
                archs = ["i386", "amd64"]
            for arch in archs:
                docker_image = "linuxmintd/%s-%s" % (distribution, arch)
                console.rule("[bold cyan]%s[/bold cyan] [dim]·[/dim] %s" % (repository, docker_image))
                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:
        if ((distribution.startswith("mint") and float(distribution[4:]) >= 20) or
                (distribution.startswith("lmde") and float(distribution[4:]) >= 7)):
            archs = ["amd64"]
        else:
            archs = ["i386", "amd64"]
        for arch in archs:
            docker_image = "linuxmintd/%s-%s" % (distribution, arch)
            console.rule("[bold cyan]%s[/bold cyan]" % docker_image)
            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")
