"""
On release, ensure that the release tag matches the InvenTree version number!
"""

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import sys
import re
import os
import argparse

if __name__ == '__main__':

    here = os.path.abspath(os.path.dirname(__file__))

    version_file = os.path.join(here, '..', 'InvenTree', 'InvenTree', 'version.py')

    version = None

    with open(version_file, 'r') as f:

        text = f.read()

        # Extract the InvenTree software version
        results = re.findall(r'INVENTREE_SW_VERSION = "(.*)"', text)

        if not len(results) == 1:
            print(f"Could not find INVENTREE_SW_VERSION in {version_file}")
            sys.exit(1)

        version = results[0]

    print(f"InvenTree Version: '{version}'")

    parser = argparse.ArgumentParser()
    parser.add_argument('-t', '--tag', help='Compare against specified version tag', action='store')
    parser.add_argument('-r', '--release', help='Check that this is a release version', action='store_true')
    parser.add_argument('-d', '--dev', help='Check that this is a development version', action='store_true')
    parser.add_argument('-b', '--branch', help='Check against a particular branch', action='store')

    args = parser.parse_args()

    if args.branch:
        """
        Version number requirement depends on format of branch

        'master': development branch
        'stable': release branch
        """

        print(f"Checking version number for branch '{args.branch}'")

        if args.branch == 'master':
            print("- This is a development branch")
            args.dev = True
        elif args.branch == 'stable':
            print("- This is a stable release branch")
            args.release = True

    if args.dev:
        """
        Check that the current verrsion number matches the "development" format
        e.g. "0.5 dev"
        """

        print("Checking development branch")

        pattern = r"^\d+(\.\d+)+ dev$"

        result = re.match(pattern, version)

        if result is None:
            print(f"Version number '{version}' does not match required pattern for development branch")
            sys.exit(1)

    elif args.release:
        """
        Check that the current version number matches the "release" format
        e.g. "0.5.1"
        """

        print("Checking release branch")

        pattern = r"^\d+(\.\d+)+$"

        result = re.match(pattern, version)

        if result is None:
            print(f"Version number '{version}' does not match required pattern for stable branch")
            sys.exit(1)

    if args.tag:
        if not args.tag == version:
            print(f"Release tag '{args.tag}' does not match INVENTREE_SW_VERSION '{version}'")
            sys.exit(1)

sys.exit(0)