#!python
import argparse
import os
import sys

from semvermanager import Version

if __name__ == "__main__":

    parser = argparse.ArgumentParser()

    parser.add_argument(
        "--filename",
        default=Version.FILENAME,
        help="File to use as version file [default: %(default)s]"
    )

    parser.add_argument(
        "--version",
        help="Specify a version in the form major.minor.patch-tag"
    )

    parser.add_argument(
        "--make",
        default=False,
        action="store_true",
        help="Make a new version file")

    parser.add_argument(
        "--bump",
        choices=Version.FIELDS,
        help="Bump a version field")

    parser.add_argument(
        "--getversion",
        default=False,
        action="store_true",
        help="Report the current version in the specified file")

    parser.add_argument(
        "--bareversion",
        default=False,
        action="store_true",
        help="Return the unquoted version strin with VERSION=")

    parser.add_argument(
        "--overwrite",
        default=False,
        action="store_true",
        help="overwrite files without checking"
    )

    parser.add_argument(
        "--update",
        default=False,
        action="store_true",
        help="Update multiple version strings in file"
    )
    args = parser.parse_args()

    if args.version:
        version = Version.parse_version("VERSION="+args.version)

    if args.make:
        if args.overwrite or not os.path.isfile(args.filename):
            filename, version = Version.write(args.filename)
            print(f"Created {version} in '{args.filename}'")
        elif os.path.isfile(args.filename):
            answer = input(f"Overwrite file '{args.filename}' (Y/N [N]: ")
            if len(answer) > 0 and answer.strip().lower() == 'y':
                filename, version = Version.write(args.filename)
                print(f"Overwrote {version} in '{args.filename}'")

    if args.getversion:
        if os.path.isfile(args.filename):
            v = Version.find(args.filename)
            print(v)
        else:
            print(f"No such version file: '{args.filename}'")

    if args.bareversion:
        if os.path.isfile(args.filename):
            v = Version.find(args.filename)
            print(v.bare_version())
        else:
            print(f"No such version file: '{args.filename}'")

    if args.bump in Version.FIELDS:
        if not os.path.isfile(args.filename):
            print(f"No such file:'{args.filename}' can't bump {args.bump} version")
            sys.exit(1)
        v = Version.find(args.filename)
        print(f"Bumping '{args.bump}' value from {v.field(args.bump)} ", end="")
        v.bump(args.bump)
        print(f"to {v.field(args.bump)} in '{args.filename}'")
        Version.update(args.filename, v)
        print(f"new version: {v}")

    if args.update:
        print(f"Updating '{args.filename}' with version '{version}'")
        Version.update(filename=args.filename, version=version)

