from __future__ import (print_function, absolute_import)

import io
import os
import re
from setuptools import setup


def read(path, encoding='utf-8'):
    path = os.path.join(os.path.dirname(__file__), path)
    with io.open(path, encoding=encoding) as fp:
        return fp.read()


def version(path):
    """Obtain the packge version from a python file e.g. pkg/__init__.py
    See <https://packaging.python.org/en/latest/single_source_version.html>.
    """
    version_file = read(path)
    version_match = re.search(r"""^__version__ = ['"]([^'"]*)['"]""",
                              version_file, re.M)
    if version_match:
        return version_match.group(1)
    raise RuntimeError("Unable to find version string.")


def package_files(root, package_data_dir):
    paths = []

    directory = os.path.join(root, package_data_dir)

    for (path, directories, filenames) in os.walk(directory):
        for filename in filenames:
            full_path = os.path.join(path, filename)

            paths.append(os.path.relpath(full_path, root))
    return paths


java_files = package_files('pyNetLogo', 'java')
# java_files = [''.join(['connectors/', entry]) for entry in java_files]

NAME = 'pyNetLogo'
pjoin = os.path.join
here = os.path.abspath(os.path.dirname(__file__))
pkg_root = pjoin(here, NAME)

packages = []
for d, _, _ in os.walk(pjoin(here, NAME)):
    if os.path.exists(pjoin(d, '__init__.py')):
        packages.append(d[len(here) + 1:].replace(os.path.sep, '.'))

VERSION = version('pyNetLogo/__init__.py')
LONG_DESCRIPTION = """Project Documentation: https://pyNetLogo.readthedocs.io/"""

JAVA = java_files
PACKAGES = packages

setup(
    name=NAME,
    version=VERSION,
    description='Python interface to NetLogo',
    long_description=LONG_DESCRIPTION,
    author='Jan Kwakkel',
    author_email='j.h.kwakkel@tudelft.nl',
    packages=PACKAGES,
    package_data={NAME: JAVA},
    url='https://github.com/quaquel/pyNetLogo',
    license='BSD 3-Clause',
    platforms="Linux, Mac OS X, Windows",
)