import os
import typing as tp

from Cython.Build import cythonize
from satella.files import find_files
from distutils.core import setup

from setuptools import find_packages, Extension
from snakehouse import Multibuild, build, monkey_patch_parallel_compilation


def find_pyx(*path) -> tp.List[str]:
    return list(find_files(os.path.join(*path), r'(.*)\.pyx', scan_subdirectories=True))


monkey_patch_parallel_compilation()

directives = {'language_level': '3'}
ext_kwargs = {}
cythonize_kwargs = {}
if 'CI' in os.environ:
    ext_kwargs['define_macros'] = [("CYTHON_TRACE_NOGIL", "1")]
    directives.update(profile=True, linetrace=True, embedsignature=True)
    cythonize_kwargs['gdb_debug'] = True
    # extensions = [
    #     Extension('tempsdb.database', ['tempsdb/database.pyx']),
    #     Extension('tempsdb.database', ['tempsdb/database.pyx']),
    #     Extension('tempsdb.exceptions', ['tempsdb/exceptions.pyx']),
    #     Extension('tempsdb.iterators', ['tempsdb/iterators.pyx']),
    #     Extension('tempsdb.series', ['tempsdb/series.pyx']),
    #     Extension('tempsdb.varlen', ['tempsdb/varlen.pyx']),
    #     Extension('tempsdb.chunks.gzip', ['tempsdb/chunks/gzip.pyx']),
    #     Extension('tempsdb.chunks.direct', ['tempsdb/chunks/direct.pyx']),
    #     Extension('tempsdb.chunks.normal', ['tempsdb/chunks/normal.pyx']),
    #     Extension('tempsdb.chunks.maker', ['tempsdb/chunks/maker.pyx']),
    #     Extension('tempsdb.chunks.base', ['tempsdb/chunks/base.pyx']),
    # ]
    # ext_modules = cythonize(extensions, compiler_directives=directives)
ext_modules = build([Multibuild('tempsdb', find_pyx('tempsdb'), **ext_kwargs), ],
                     compiler_directives=directives,
                     **cythonize_kwargs)

setup(name='tempsdb',
      version='0.5.2',
      packages=find_packages(include=['tempsdb', 'tempsdb.*']),
      install_requires=['satella>=2.14.24', 'ujson'],
      ext_modules=ext_modules,
      python_requires='!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*',
      test_suite="tests",
      zip_safe=True
      )