import os

from setuptools import find_packages, setup

readme = open("README.md").read()
history = open("BACKLOG.md").read()

keywords_list = [
    "virus",
    "pandemic",
    "covid19",
    "corona",
    "who",
    "rki",
    "ecdc",
    "deaths",
    "cases",
    "vaccination",
    "data",
    "statistic",
    "python",
    "flask",
    "celery",
    "sqlalchemy",
    "postgresql"
]

requires_setup = [
    "setuptools==53.0.0",
    "wheel==0.36.2",
    "pip-licenses==3.3.0",
    "pip-tools==5.5.0",
    "packaging==20.0",
    "tokenize-rt>=4.1.0",
    "flask-resources==0.6.0",
    "Flask-PluginKit>=3.6.0",
    "Flask-ResponseBuilder>=2.0.12",
    "Flask-Babel>=2",
    "npmdownloader>=1.2.1"
]

requires_test = [
    "pytest>=5.3.2",
    "greenlet==1.0.0",
    "python-dotenv==0.15.0",
    "blinker==1.4",
    "test-flask>=0.2.0",
    "pytest-flask>=1.1.0",
]

requires_docs = [
    "sphinx==3.4.3",
    "sphinx-tabs==2.0.1",
    "sphinx-issues==1.2.0",
    "pallets-sphinx-themes==1.2.3",
    "sphinxcontrib-plantuml==0.19",
    "sphinxcontrib-gravizo==0.0.4"
    "py2puml==0.3.1",
    "plantuml-creator==1.0.7",
    "plantuml-markdown==3.4.2",
    "plantuml-wrapper==0.1.0",
    "plantuml2freemind==0.8.2",
    "plantuml-gentools==0.1.2",
    "speaklater==1.3"
]

dotenv_require = [
    "python-dotenv==0.15.0"
]

requires_extras = {
    "docs": requires_docs,
    "tests": requires_test,
    "dotenv": dotenv_require,
    "all": []
}

requires_install_minimum = [
    "dash>=1.19.0",
    "dash-extensions>=0.0.45",
    "dtale>=1.34.0",
    "Flask>=1.1.2",
    "Flask-SQLAlchemy>=2.4.4",
    "Flask-Cors>=3.0.10",
    "Flask-BS4==4.5.3.0",
    "SQLAlchemy>=1.3.23",
    "psycopg2>=2.8.6",
    "wget>=3.2",
    "celery[redis]>=5.0.5",
]

requires_install_user_security = [
    "Flask-Multipass>=0.3.3",
    "Flask-Login<0.6.0,>=0.5.0",
]

requires_install_operating = [
    "Flask-Admin>=1.5.7",
    "Flask-Redisboard>=0.2.0",
    "Flask-Monitoring>=1.1.2",
    "flask-healthz>=0.0.2",
    "aiocronjob>=0.2.0",
    "Flask-Caching>=1.9.0"
]

requires_install_nore_flask = [
    "manual-sitemap>=19.6.0",
    "Flask-DB>=0.3.0",
    "flask-pwa>=0.1.0",
    "Flask-Moment>=0.11.0",
    "Flask-CKEditor>=0.4.4.1",
    "flask-checkr>=0.1.2",
    "flask-whooshalchemy3>=0.2.0",
    "flask-was>=0.1.0",
    "Flask-GraphQL>=2.0.1",
    "flask-hintful>=0.0.7",
]

require_install_data_processing = [
    "pyecharts>=1.9.0",
    "pyecharts-extras>=0.0.5",
    "reactive-pyecharts>=1.0.0",
    "visdom>=0.1.8.9",
    "pynndescent>=0.5.1",
    "torch>=1.7.1",
    "numpy>=1.20.1",
    "pandas>=1.1.0",
    "scipy>=1.5.0",
    "StatisticalDiagrams>=20.5",
]

requires_install = []

requires_install_groups = [
    requires_install_minimum,
    requires_install_user_security,
    requires_install_operating,
    requires_install_nore_flask,
    require_install_data_processing,
]

for reqs in requires_extras.values():
    requires_extras["all"].extend(reqs)

for my_group in requires_install_groups:
    for my_item in my_group:
        requires_install.append(my_item)

keywords = ""
for kw in keywords_list:
    keywords += " " + kw

packages = find_packages()

setup(
    name='thomaswoehlke-covid19python',
    version='0.0.16',
    url='ttps://github.com/thomaswoehlke/covid19python.git',
    license='GNU General Public License v3 (GPLv3)',
    author='Thomas Woehlke',
    author_email='thomas.woehlke@gmail.com',
    description='Covid19 Data Aggregation - also a Project to learn Python Flask, SQLAlchemy, Celery et al.',
    classifiers=[
        "Environment :: Web Environment",
        "Intended Audience :: Developers",
        "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
        "Operating System :: POSIX :: Linux",
        "Programming Language :: Python",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.8",
        "Development Status :: 3 - Alpha",
        "Natural Language :: German",
        "Natural Language :: English",
        "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
        "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
        "Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware",
        "Topic :: Software Development :: Libraries :: Python Modules",
    ],
    long_description=readme + "\n\n" + history,
    long_description_content_type="text/markdown",
    keywords=keywords,
    packages=packages,
    zip_safe=False,
    include_package_data=True,
    entry_points={},
    extras_require=requires_extras,
    install_requires=requires_install,
    setup_requires=requires_setup,
    tests_require=requires_test,
    python_requires=">= 3.8"
)