import os
import sys

from distutils.version import LooseVersion
from setuptools import setup, find_packages

# ****************************************************
DJANGO_INSTALLED = False
try:
    import django
    DJANGO_INSTALLED = True

    LOOSE_DJANGO_VERSION = LooseVersion(django.get_version())
    LOOSE_DJANGO_MINOR_VERSION = LooseVersion(
        '.'.join([str(i) for i in LOOSE_DJANGO_VERSION.version[0:2]])
    )

    # Loose versions
    LOOSE_VERSIONS = (
        '1.4', '1.5', '1.6', '1.7', '1.8', '1.9', '1.10', '1.11', '2.0', '2.1',
        '2.2', '3.0'
    )

    for v in LOOSE_VERSIONS:
        var_name = 'LOOSE_VERSION_{0}'.format(v.replace('.', '_'))
        globals()[var_name] = LooseVersion(v)

    # Exact versions
    EXACT_VERSIONS = LOOSE_VERSIONS[:-1]

    for i, v in enumerate(EXACT_VERSIONS):
        l_cur = globals()['LOOSE_VERSION_{0}' \
                          ''.format(LOOSE_VERSIONS[i].replace('.', '_'))]
        l_nxt = globals()['LOOSE_VERSION_{0}' \
                          ''.format(LOOSE_VERSIONS[i + 1].replace('.', '_'))]
        var_name = 'DJANGO_{0}'.format(v.replace('.', '_'))
        globals()[var_name] = (l_cur <= LOOSE_DJANGO_VERSION < l_nxt)

    # LTE list
    LTE_VERSIONS = LOOSE_VERSIONS[:-1]

    for i, v in enumerate(EXACT_VERSIONS):
        l_cur = globals()['LOOSE_VERSION_{0}' \
                          ''.format(LOOSE_VERSIONS[i].replace('.', '_'))]
        var_name = 'DJANGO_LTE_{0}'.format(v.replace('.', '_'))
        globals()[var_name] = (LOOSE_DJANGO_MINOR_VERSION <= l_cur)

    # GTE list
    GTE_VERSIONS = LOOSE_VERSIONS[:-1]

    for i, v in enumerate(EXACT_VERSIONS):
        l_cur = globals()['LOOSE_VERSION_{0}' \
                          ''.format(LOOSE_VERSIONS[i].replace('.', '_'))]
        var_name = 'DJANGO_GTE_{0}'.format(v.replace('.', '_'))
        globals()[var_name] = (
            LOOSE_DJANGO_MINOR_VERSION >= l_cur
        )

except Exception as err:
    pass

# ****************************************************
try:
    readme = open(os.path.join(os.path.dirname(__file__), 'README.rst')).read()
    readme = readme.replace('.. code-block:: none', '.. code-block::')
    screenshots = open(
        os.path.join(os.path.dirname(__file__), 'SCREENSHOTS.rst')
    ).read()
    screenshots = screenshots.replace(
        '.. image:: _static',
        '.. figure:: https://github.com/barseghyanartur/django-fobi/raw/'
        'master/docs/_static'
    )
    screenshots = screenshots.replace(
        '.. code-block:: none',
        '.. code-block::'
    )
except:
    readme = ''
    screenshots = ''

template_dirs = [
    # Core templates
    "src/fobi/templates/fobi",

    # Bootstrap 3
    "src/fobi/contrib/themes/bootstrap3/templates/bootstrap3",

    # Foundation 5
    "src/fobi/contrib/themes/foundation5/templates/foundation5",

    # DB Store widget for Foundation 5
    "src/fobi/contrib/themes/foundation5/widgets/form_handlers/"
    "db_store_foundation5_widget",

    # Simple
    "src/fobi/contrib/themes/simple/templates/simple",

    # djangocms_admin_style_theme
    "src/fobi/contrib/themes/djangocms_admin_style_theme/templates/"
    "djangocms_admin_style_theme",

    # DjangoCMS integration
    "src/fobi/contrib/apps/djangocms_integration/templates/"
    "djangocms_integration",

    # FeinCMS integration
    # "src/fobi/contrib/apps/feincms_integration/templates/"
    # "feincms_integration",

    # Mezzanine integration
    "src/fobi/contrib/apps/mezzanine_integration/templates/"
    "mezzanine_integration",

    # Content image
    "src/fobi/contrib/plugins/form_elements/content/content_image/"
    "templates/content_image",

    # DB Store
    "src/fobi/contrib/plugins/form_handlers/db_store/templates/db_store",

    # Mail
    "src/fobi/contrib/plugins/form_handlers/mail/templates/mail",

    # Http re-post
    "src/fobi/contrib/plugins/form_handlers/http_repost/templates/"
    "http_repost",

    # MailChimp importer
    "src/fobi/contrib/plugins/form_importers/mailchimp_importer/templates/"
    "mailchimp_importer",
]

static_dirs = [
    # Core static
    "src/fobi/static",

    # Bootstrap3
    "src/fobi/contrib/themes/bootstrap3/static",

    # Bootstrap3 datetime widget
    "src/fobi/contrib/themes/bootstrap3/widgets/form_elements/"
    "datetime_bootstrap3_widget/static",

    # Bootstrap3 date widget
    "src/fobi/contrib/themes/bootstrap3/widgets/form_elements/"
    "date_bootstrap3_widget/static",

    # Bootstrap3 slider widget
    "src/fobi/contrib/themes/bootstrap3/widgets/form_elements/"
    "slider_bootstrap3_widget/static",

    # Foundation5
    "src/fobi/contrib/themes/foundation5/static",

    # Foundation5 datetime widget
    "src/fobi/contrib/themes/foundation5/widgets/form_elements/"
    "datetime_foundation5_widget/static",

    # Foundation5 date widget
    "src/fobi/contrib/themes/foundation5/widgets/form_elements/"
    "date_foundation5_widget/static",

    # Simple
    "src/fobi/contrib/themes/simple/static",

    # djangocms_admin_style_theme
    "src/fobi/contrib/themes/djangocms_admin_style_theme/static",

    # DB Store
    "src/fobi/contrib/plugins/form_handlers/db_store/static",

    # Dummy
    "src/fobi/contrib/plugins/form_elements/test/dummy/static",
]

locale_dirs = [
    "src/fobi/locale/nl",
    "src/fobi/locale/ru",
    "src/fobi/locale/de",
]

templates = []
static_files = []
locale_files = []

for template_dir in template_dirs:
    templates += [os.path.join(template_dir, f)
                  for f
                  in os.listdir(template_dir)]

for static_dir in static_dirs:
    static_files += [os.path.join(static_dir, f)
                     for f
                     in os.listdir(static_dir)]

for locale_dir in locale_dirs:
    locale_files += [os.path.join(locale_dir, f)
                     for f
                     in os.listdir(locale_dir)]

version = '0.8.6'

install_requires = []
# If certain version of Django is already installed, choose version agnostic
# dependencies.
if DJANGO_INSTALLED:
    if DJANGO_1_5 or DJANGO_1_6 or DJANGO_1_7:
        install_requires = [
            'django-autoslug==1.7.1',
            # 'django-formtools>=1.0',
            'django-nine>=0.1.10',
            'django-nonefield>=0.1',
            'ordereddict>=1.1',
            'Pillow>=2.0.0',
            'requests>=1.0.0',
            'six>=1.9',
            'Unidecode>=0.04.1',
            'vishap>=0.1.5,<2.0',
        ]
    elif DJANGO_1_8:
        install_requires = [
            'django-autoslug==1.7.1',
            'django-formtools>=1.0',
            'django-nine>=0.1.10',
            'django-nonefield>=0.1',
            'ordereddict>=1.1',
            'Pillow>=2.0.0',
            'requests>=1.0.0',
            'six>=1.9',
            'Unidecode>=0.04.1',
            'vishap>=0.1.5,<2.0',
        ]
    elif DJANGO_1_9:
        install_requires = [
            'django-autoslug==1.9.3',
            'django-formtools>=1.0',
            'django-nine>=0.1.10',
            'django-nonefield>=0.1',
            'ordereddict>=1.1',
            'Pillow>=2.0.0',
            'requests>=1.0.0',
            'six>=1.9',
            'Unidecode>=0.04.1',
            'vishap>=0.1.5,<2.0',
        ]
    elif DJANGO_1_10:
        install_requires = [
            'django-autoslug==1.9.3',
            'django-formtools>=1.0',
            'django-nine>=0.1.10',
            'django-nonefield>=0.1',
            'ordereddict>=1.1',
            'Pillow>=2.0.0',
            'requests>=1.0.0',
            'six>=1.9',
            'Unidecode>=0.04.1',
            'vishap>=0.1.5,<2.0',
        ]
# Fall back to the latest dependencies
if not install_requires:
    install_requires = [
        'django-autoslug>=1.9.3',
        'django-formtools>=1.0',
        'django-nine>=0.1.10',
        'django-nonefield>=0.1',
        'ordereddict>=1.1',
        'Pillow>=2.0.0',
        'requests>=1.0.0',
        'six>=1.9',
        'Unidecode>=0.04.1',
        'vishap>=0.1.5,<2.0',
    ]

# There are also conditional PY3/PY2 requirements. Scroll down to see them.

tests_require = [
    'selenium',
]

try:
    PY2 = sys.version_info[0] == 2
    LTE_PY26 = PY2 and (7 > sys.version_info[1])
    PY3 = sys.version_info[0] == 3
    if PY3:
        install_requires.append('simplejson>=3.0.0')  # When using Python 3
        install_requires.append('easy-thumbnails>=2.3')
    else:
        install_requires.append('simplejson>=2.1.0')  # When using Python 2.*
        install_requires.append('easy-thumbnails>=1.4')
except Exception as err:
    pass

setup(
    name='django-fobi',
    version=version,
    description=("Form generator/builder application for Django done right: "
                 "customisable, modular, user- and developer- friendly."),
    long_description="{0}{1}".format(readme, screenshots),
    classifiers=[
        "Programming Language :: Python :: 2.6",
        "Programming Language :: Python :: 2.7",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.3",
        "Programming Language :: Python :: 3.4",
        "Programming Language :: Python :: 3.5",
        "Environment :: Web Environment",
        "License :: OSI Approved :: GNU General Public License v2 (GPLv2)",
        "License :: OSI Approved :: GNU Lesser General Public License v2 or "
        "later (LGPLv2+)",
        "Framework :: Django",
        "Intended Audience :: Developers",
        "Operating System :: OS Independent",
        "Development Status :: 4 - Beta",
    ],
    keywords="django, form generator, form builder, visual form designer, "
             "user generated forms",
    author='Artur Barseghyan',
    author_email='artur.barseghyan@gmail.com',
    url='https://github.com/barseghyanartur/django-fobi/',
    package_dir={'': 'src'},
    packages=find_packages(where='./src'),
    license='GPL 2.0/LGPL 2.1',
    install_requires=install_requires,
    tests_require=tests_require,
    package_data={
        'fobi': templates + static_files + locale_files
    },
    include_package_data=True,
)
