#!/usr/bin/env python3
# -*- coding: utf-8 -*-


from pathlib import Path
from typing import Dict

from setuptools import find_namespace_packages, setup

PACKAGE_NAME = 'nucypher'
BASE_DIR = Path(__file__).parent
PYPI_CLASSIFIERS = [
    "Development Status :: 3 - Alpha",
    "Intended Audience :: Developers",
    "Natural Language :: English",
    "Operating System :: OS Independent",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Topic :: Security",
]

ABOUT: Dict[str, str] = dict()
SOURCE_METADATA_PATH = BASE_DIR / PACKAGE_NAME / "__about__.py"
with open(str(SOURCE_METADATA_PATH.resolve())) as f:
    exec(f.read(), ABOUT)


def read_requirements(path):
    with open(BASE_DIR / path) as f:
        return f.read().split("\n")


INSTALL_REQUIRES = read_requirements("requirements.txt")
DEV_REQUIRES = read_requirements("dev-requirements.txt")

EXTRAS = {
    "dev": DEV_REQUIRES,
}

# read the contents of your README file
long_description = (Path(__file__).parent / "README.md").read_text()

setup(

    # Requirements
    python_requires=">=3.9,<4",
    install_requires=INSTALL_REQUIRES,
    extras_require=EXTRAS,

    # Package Data
    packages=find_namespace_packages(
        exclude=["scripts", "nucypher.utilities.templates"]
    ),
    include_package_data=True,
    zip_safe=True,

    # Entry Points
    entry_points={
        'console_scripts': [
            'nucypher = nucypher.cli.main:nucypher_cli',
        ],
        'pytest11': [
            "pytest-nucypher = tests.fixtures"
        ]
    },

    # Metadata
    name=ABOUT['__title__'],
    url=ABOUT['__url__'],
    version=ABOUT['__version__'],
    author=ABOUT['__author__'],
    author_email=ABOUT['__email__'],
    description=ABOUT['__summary__'],
    license=ABOUT['__license__'],
    long_description_content_type="text/markdown",
    long_description=long_description,
    keywords="threshold access control, distributed key generation",
    classifiers=PYPI_CLASSIFIERS,
)
