#!/usr/bin/env python3

import re


class StringUtils(object):

    """
    Opens conditional brackets from
    (aaa <= 3.1 or bbb) ccc (ddd or fff > 4.5.6)
    into
    aaa <= 3.1 ccc ddd
    """

    def getStringInConditionalBrackets(self, inputstring):
        inputstring = inputstring.strip()
        items = re.findall(r"([(][A-Za-z0-9 %{?}_\.\-<>=]+[)])", inputstring)
        for m in items:
            out = m[m.find("(") + 1 : m.find(" or ")].strip()  # noqa: E203
            inputstring = inputstring.replace(m, out)
        return inputstring

    def getFileNameFromURL(self, inputstring):
        index = inputstring.rfind("/")
        return inputstring[index + 1 :]  # noqa: E203

    def getPackageNameFromURL(self, inputstring):
        filename = self.getFileNameFromURL(inputstring)
        m = re.search(
            r"(zip|mozjs|.+-)([0-9_.]+)(\.source|\.tar|-src|\.zip|\+md|\.tgz).*",  # noqa: E501
            filename,
        )
        if m is None:
            print(f"Unable to parse {filename}")
            return inputstring
        name = m.group(1)
        if name.endswith("-"):
            name = name[:-1]
        return name

    def getPackageVersionFromURL(self, inputstring):
        filename = self.getFileNameFromURL(inputstring)
        m = re.search(
            r"(zip|mozjs|.*-)([0-9_.]+)(\.source|\.tar|-src|\.zip|\+md|\.tgz).*",  # noqa: E501
            filename,
        )
        if m is None:
            print("Unable to parse " + filename)
            return inputstring
        name = m.group(2)
        return name.replace("_", ".")

    @staticmethod
    def splitPackageNameAndVersion(pkg):
        packageVersion = pkg.rsplit('-', 1)[0]
        if not packageVersion:
            raise Exception(f"Invalid argument: {pkg}")
        packageName = packageVersion.rsplit("-", 1)[0]
        packageVersion = pkg.rsplit(packageName)[1][1:]
        return packageName, packageVersion