[build-system]
requires = ["setuptools>=65.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "medeia-macina"
version = "0.1.0"
description = "Comprehensive media management and search platform with support for local files, Hydrus database, torrents, books, and P2P networks"
requires-python = ">=3.9,<3.14"
license = {text = "MIT"}
authors = [
    {name = "Your Name", email = "your.email@example.com"}
]
keywords = ["media", "search", "management", "hydrus", "download", "cli", "tui"]
classifiers = [
    "Development Status :: 3 - Alpha",
    "Environment :: Console",
    "Intended Audience :: End Users/Desktop",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Topic :: Multimedia",
    "Topic :: Internet",
]

dependencies = [
    # Core CLI and TUI frameworks
    "typer>=0.9.0",
    "prompt-toolkit>=3.0.0",
    "textual>=0.30.0",

    # Media processing and downloading
    "yt-dlp[default]>=2023.11.0",
    "yt-dlp-ejs",  # EJS challenge solver scripts for YouTube JavaScript challenges
    "requests>=2.31.0",
    "charset-normalizer>=3.2.0",
    "certifi>=2024.12.0",
    "httpx>=0.25.0",

    # Document and data handling
    "pypdf>=3.0.0",
    "mutagen>=1.46.0",
    "cbor2>=4.0",
    "zstandard>=0.23.0",

    # Image and media support
    "Pillow>=10.0.0",
    "python-bidi>=0.4.2",
    "ffmpeg-python>=0.2.0",

    # Metadata extraction and processing
    "musicbrainzngs>=0.7.0",
    "lxml>=4.9.0",

    # Advanced searching and libraries
    # Optional Soulseek support installs aioslsk>=1.6.0 when [provider=soulseek] is configured.
    "imdbinfo>=0.1.10",

    # Encryption and security
    "pycryptodome>=3.18.0",

    # Data processing
    "bencode3",
    "tqdm>=4.66.0",

    # Browser automation
    "playwright>=1.40.0",

    # Development and utilities
    "python-dateutil>=2.8.0",
]

[project.optional-dependencies]
dev = [
    # Testing
    "pytest>=7.4.0",
    "pytest-cov>=4.1.0",
    "pytest-asyncio>=0.21.0",

    # Code quality
    "black>=23.11.0",
    "flake8>=6.1.0",
    "isort>=5.12.0",
    "mypy>=1.7.0",
    "pylint>=3.0.0",

    # Documentation
    "sphinx>=7.2.0",
    "sphinx-rtd-theme>=1.3.0",

    # Debugging and profiling
    "ipython>=8.17.0",
    "ipdb>=0.13.0",
    "memory-profiler>=0.61.0",

    # Version control and CI/CD helpers
    "pre-commit>=3.5.0",
]

[project.scripts]
mm = "scripts.cli_entry:main"
medeia = "scripts.cli_entry:main"

[project.urls]
Homepage = "https://github.com/yourusername/medeia-macina"
Documentation = "https://medeia-macina.readthedocs.io"
Repository = "https://github.com/yourusername/medeia-macina.git"
Issues = "https://github.com/yourusername/medeia-macina/issues"

[tool.setuptools]

[tool.setuptools.packages.find]
where = [".."]
exclude = ["tests*", "docs*"]

[tool.black]
line-length = 100
target-version = ['py39', 'py310', 'py311', 'py312']
include = '\\.pyi?$'
extend-exclude = '''
/(
  # directories
  \.eggs
  | \.git
  | \.hg
  | \.mypy_cache
  | \.tox
  | \.venv
  | _build
  | buck-out
  | build
  | dist
  | __pycache__
)/
'''

[tool.isort]
profile = "black"
line_length = 100
target_version = ["py39", "py310", "py311", "py312"]

[tool.mypy]
python_version = "3.9"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = false
disallow_incomplete_defs = false
check_untyped_defs = false
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_no_return = true

[tool.pylint.messages_control]
disable = [
    "C0330", "C0326",  # Bad whitespace
    "R0913",            # Too many arguments
    "R0914",            # Too many local variables
]

[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py", "*_test.py"]
addopts = "-v --cov=. --cov-report=html --cov-report=term-missing"

[tool.coverage.run]
branch = true
omit = [
    "*/tests/*",
    "*/__main__.py",
]

[tool.coverage.report]
exclude_lines = [
    "pragma: no cover",
    "def __repr__",
    "raise AssertionError",
    "raise NotImplementedError",
    "if __name__ == .__main__.:",
    "if TYPE_CHECKING:",
]
