#!/usr/bin/env python3

import sys
import re
import argparse
import subprocess
import textwrap

def shget(cmd):
    return subprocess.run(cmd, shell=True, encoding="utf-8", capture_output=True).stdout.strip()


parser = argparse.ArgumentParser(
                    description="Bump the libeufin version.")

parser.add_argument("new_version")
parser.add_argument("--dry", action="store_true")

args = parser.parse_args()

new_version = args.new_version
dry = args.dry

version = sys.argv[1]

# Bump version of "debian/changelog"

with open("debian/changelog") as deb_changelog:
    while True:
        line = deb_changelog.readline()
        if line == "":
            break
        if line.strip() == "":
            continue
        m = re.match(r".*\((.*)\).*", line)
        break

deb_current_version = m.group(1)
deb_bump = " [!]" if deb_current_version != version else ""

print(f"debian/control: {deb_current_version} -> {version}{deb_bump}")

if not dry and deb_current_version != version:
    name = shget("git config user.name")
    email = shget("git config user.email")
    date = shget("date -R")
    entry_r = f"""\
    libeufin ({new_version}) unstable; urgency=low

      * Release version {new_version}

     -- {name} <{email}>  {date}
    """
    entry = textwrap.dedent(entry_r)
    with open("debian/changelog") as f:
        old_changelog = f.read()
    new_changelog = entry + "\n" + old_changelog
    with open("debian/changelog", "w") as f:
        f.write(new_changelog)

# Bump version in build.gradle

with open("build.gradle") as f:
    contents = f.read()
gradle_pat = r'version.*=.*"(.*)"'
m = re.search(gradle_pat, contents)
gradle_current_version = m.group(1)

new_contents = re.sub(gradle_pat, f'version = "{new_version}"', contents)
gradle_bump = " [!]" if gradle_current_version != version else ""
print(f"build.gradle: {gradle_current_version} -> {version}{gradle_bump}")

if not dry:
    with open("build.gradle", "w") as f:
        f.write(new_contents)
