import os
import re


def get_project_info_from_setup():
    # when Wrapyfi is not installed
    try:
        curr_dir = os.path.dirname(__file__)
        setup_path = os.path.join(curr_dir, "..", "setup.py")
        with open(setup_path, 'r') as f:
            content = f.read()
    except FileNotFoundError:
        return {}
    name_match = re.search(r"name\s*=\s*['\"]([^'\"]*)['\"]", content)
    version_match = re.search(r"version\s*=\s*['\"]([^'\"]*)['\"]", content)
    url_match = re.search(r"url\s*=\s*['\"]([^'\"]*)['\"]", content)
    doc_match = re.search(r"'Documentation':\s*['\"]([^'\"]*)['\"]", content)
    
    if not name_match or not version_match or not url_match:
        # raise RuntimeError("Unable to find name, version, or url string.")
        return {}
        
    return {
        'name': name_match.group(1),
        'version': version_match.group(1),
        'url': url_match.group(1),
        'doc': None if not doc_match else doc_match.group(1)
    }


# extract project info
project_info = get_project_info_from_setup()

__version__ = project_info.get('version', None)
__url__ = project_info.get('url', None)
__doc__ = project_info.get('doc', None)
name = project_info.get('name', 'wrapyfi')

if __version__ is None or __url__ is None or __doc__ is None:
    try:
        from importlib import metadata
        mdata = metadata.metadata(__name__)
        __version__ = metadata.version(__name__)
        __url__ = mdata["Home-page"]
        # when installed with PyPi
        if __url__ is None:
            for url_extract in mdata.get_all("Project-URL"):
                __url__ = url_extract.split(", ")[1] if url_extract.split(", ")[0] == "Homepage" else __url__
        if __doc__ is None:
            for url_extract in mdata.get_all("Project-URL"):
                __doc__ = url_extract.split(", ")[1] if url_extract.split(", ")[0] == "Documentation" else __doc__
    except ImportError:
        try:
            # when Python < 3.8 and setuptools/pip have not been updated
            import pkg_resources
            mdata = pkg_resources.get_distribution(__name__).metadata
            __version__ = pkg_resources.require(__name__)[0].version
            __url__ = mdata["Home-page"]
            # when installed with PyPi
            if __url__ is None:
                for url_extract in mdata.get_all("Project-URL"):
                    __url__ = url_extract.split(", ")[1] if url_extract.split(", ")[0] == "Homepage" else __url__
            if __doc__ is None:
                for url_extract in mdata.get_all("Project-URL"):
                    __doc__ = url_extract.split(", ")[1] if url_extract.split(", ")[0] == "Documentation" else __doc__
        except pkg_resources.DistributionNotFound:
            __version__ = "unknown_version"
            __url__ = "unknown_url"
            __doc__ = "unknown_url"
    except Exception:
        __version__ = "unknown_version"
        __url__ = "unknown_url"
        __doc__ = "unknown_url"

from wrapyfi.utils import PluginRegistrar

PluginRegistrar.scan()

import logging
logging.getLogger().setLevel(logging.INFO)
