import setuptools
import argparse
import sys
from subprocess import Popen, PIPE


with open("README.md", "r") as fh:
    long_description = fh.read()

parser=argparse.ArgumentParser()
parser.add_argument('--version', help='version')
parser.add_argument('bdist_wheel', help='bdist_wheel')
args=parser.parse_args()

# Remove the "non-standard" arguments from sys.argv so as not to confuse dist_tools
for arg in sys.argv:
    if (arg.startswith("--version")):
        sys.argv.remove(arg)

pyversion = float(sys.version_info[0]) + float(sys.version_info[1]) / 10.0

if pyversion < 3:
    str_encode = str
    str_decode = str
    def pipe_decode(output):
        return output
else:
    def str_encode(s):
        return bytes(s,sys.getdefaultencoding())
    def str_decode(bs):
        return bs.decode(sys.getdefaultencoding(),"strict")
    def pipe_decode(output):
        if isinstance(output,bytes) or isinstance(output,bytearray):
            return str_decode(output)
        elif isinstance(output,tuple):
            return (str_decode(output[0]),str_decode(output[1]))
        else:
            return ("","")


def compute_version( ):
    if (args.version != None ):
        print (args.version.split("."))
        (major, minor, patch, feature) = args.version.split(".")
        return(int(major), int(minor), int(patch), int(feature),"","","")
    else:
        proc = Popen( [ "./version" ], stdout=PIPE, stderr=PIPE )
        out,err = pipe_decode(proc.communicate( ))
        print(out)
        devbranchtag = out.split(" ")[0].strip()
        print(devbranchtag)
        releasetag = out.split(" ")[1].strip()
        dirty=""
        if (len(out.split(" ")) == 3):
            print("Latest commit doesn't have a tag. Adding -dirty flag to version string.")
            dirty="+" + out.split(" ")[2].strip() # "+" denotes local version identifier as described in PEP440
        print(releasetag)
        devbranchversion = ""
        devbranchrevision = ""
        if (devbranchtag != releasetag):
            devbranchrevision = devbranchtag.split("-")[-1]
            if (devbranchtag.startswith("CAS-")):
                devbranchversion=devbranchtag.split("-")[1]
            else:
                devbranchversion=100
            devbranchrevision = devbranchtag.split("-")[-1]
        else:
            isDevBranch = False
        (major, minor, patch, feature) = releasetag.split(".")
        #print(major, minor, patch, feature, devbranchversion, devbranchrevision, dirty)
        return(int(major), int(minor), int(patch), int(feature), devbranchversion, devbranchrevision, dirty)

(casatestutils_major,casatestutils_minor,casatestutils_patch,casatestutils_feature, devbranchversion, devbranchrevision, dirty) = compute_version( )
print(casatestutils_major, casatestutils_minor, casatestutils_patch, casatestutils_feature, devbranchversion, devbranchrevision, dirty)
casatestutils_version = '%d.%d.%d.%d%s' % (casatestutils_major,casatestutils_minor,casatestutils_patch,casatestutils_feature,dirty)
if devbranchversion !="":
    casatestutils_version = '%d.%d.%d.%da%s.dev%s%s' % (casatestutils_major,casatestutils_minor,casatestutils_patch,casatestutils_feature,devbranchversion,devbranchrevision,dirty)
print(casatestutils_version)

# Copy runtest to casatestutils during setup.py so we can call 'casatestutils.runtest'
import shutil, os
runtest_path = os.path.join(os.getcwd(),"casatestutils","runtest.py")
shutil.copyfile("runtest.py", runtest_path)

setuptools.setup(
    name="casatestutils", # Replace with your own username
    version=casatestutils_version,
    author="A. Wells",
    author_email="awells@nrao.edu",
    description="Tools for use with casatest and testing",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://open-bitbucket.nrao.edu/projects/CASA/repos/casa6/browse",
    download_url="https://casa.nrao.edu/download/",
    packages=setuptools.find_packages(),
    package_data={"casatestutils": ["component_to_test_map.json","getcalmodvla_helpers/query1.json","getantposalma_helpers/query1.json"]},
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.6',
    install_requires=['pytest'] #'scipy','numpy', 'six' 
)

# Delete Copy of File to avoid accidental commit to this location
if os.path.exists(runtest_path):
    os.remove(runtest_path)