import os

from setuptools import find_packages, setup

current_dir = os.path.abspath(os.path.dirname(__file__))

with open(os.path.join(current_dir, 'README.md'), "r", encoding="utf-8") as f:
    long_description = f.read()

long_description = long_description.replace("[!NOTE]", "")

INSTALL_REQUIRE = [
    "requests",
    "aiohttp",
    "brotli",
    "pycryptodome",
    "nest-asyncio2",
]

EXTRA_REQUIRE = {
    'all': [
        "curl_cffi>=0.6.2",
        "certifi",
        "browser_cookie3", # get_cookies
        "ddgs",            # web_search
        "beautifulsoup4",  # web_search and bing.create_images
        "platformdirs",
        "aiohttp_socks",           # proxy
        "pillow",                  # image
        "cairosvg",                # svg image
        "werkzeug",
        "flask[async]",            # gui
        "fastapi",                 # api
        "uvicorn",                 # api
        "nodriver",
        "python-multipart",
        "a2wsgi",
        "setuptools",
        "markitdown[all]",
        "python-dotenv",
        "aiofile",
        "cloudscraper",
        "wasmtime",
        "numpy"
    ],
    'slim': [
        "curl_cffi>=0.6.2",
        "certifi",
        "browser_cookie3",
        "ddgs",           # web_search
        "beautifulsoup4", # web_search and bing.create_images
        "aiohttp_socks",           # proxy
        "pillow",                  # image
        "werkzeug",
        "flask[async]",            # gui
        "fastapi",                 # api
        "uvicorn",                 # api
        "nodriver",
        "python-multipart",
        "a2wsgi",
        "pypdf2",
        "python-docx",
        "python-dotenv",
        "aiofile",
        "cloudscraper"
    ],
    "image": [
        "pillow",
        "cairosvg",
        "beautifulsoup4"
    ],
    "webview": [
        "pywebview",
        "platformdirs",
        "plyer",
        "cryptography",
    ],
    "api": [
        "loguru", "fastapi",
        "uvicorn",
        "python-multipart",
        "a2wsgi",
    ],
    "gui": [
        "werkzeug", "flask[async]",
        "beautifulsoup4", "pillow",
    ],
    "search": [
        "beautifulsoup4",
        "pillow",
        "ddgs",
    ],
    "local": [
        "gpt4all"
    ],
    "files": [
        "beautifulsoup4",
        "markitdown[all]"
    ]
}

DESCRIPTION = (
    'The official gpt4free repository | various collection of powerful language models'
)

# Setting up
setup(
    name='g4f',
    version=os.environ.get("G4F_VERSION"),
    author='Tekky',
    author_email='<support@g4f.ai>',
    description=DESCRIPTION,
    long_description_content_type='text/markdown',
    long_description=long_description,
    packages=find_packages(),
    package_data={
        'g4f': []
    },
    include_package_data=True,
    install_requires=INSTALL_REQUIRE,
    extras_require=EXTRA_REQUIRE,
    entry_points={
        'console_scripts': [
            'g4f=g4f.cli:main',
            'g4f-mcp=g4f.mcp.server:main',
        ],
    },
    url='https://github.com/xtekky/gpt4free',  # Link to your GitHub repository
    project_urls={
        'Source Code': 'https://github.com/xtekky/gpt4free',  # GitHub link
        'Bug Tracker': 'https://github.com/xtekky/gpt4free/issues',  # Link to issue tracker
    },
    keywords=[
        "gpt4free",
        "gpt4free.js",
        "g4f",
        "g4f.dev",
        "javascript",
        "npm",
        "browser",
        "gpt",
        "chatgpt",
        "deepseek",
        "openai",
        "ai",
        "client",
        "sdk",
        "free",
        "ai",
        "gpt-4",
        "gpt-4o",
        "chat",
        "api",
        "browser",
        "ai",
        "ai",
        "js",
        "client",
        "text",
        "generation",
        "image",
        "generation",
        "in-browser",
        "ai",
        "frontend",
        "ai",
        "openai",
        "alternative",
        "javascript",
        "ai",
        "library",
        "nodejs",
        "prompt",
        "engineering",
        "chatbot",
        "ai",
        "integration"
    ],
    classifiers=[
        'Development Status :: 2 - Pre-Alpha',
        'Intended Audience :: Developers',
        'Programming Language :: Python :: 3',
        'Operating System :: Unix',
        'Operating System :: MacOS :: MacOS X',
        'Operating System :: Microsoft :: Windows',
    ],
)
