[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "bincio"
version = "0.1.0"
description = "Federated, open-source, self-hosted activity stats platform"
readme = "README.md"
requires-python = ">=3.12"
license = { text = "MIT" }
authors = [{ name = "Davide Brugali" }]

dependencies = [
    # Parsing
    "gpxpy>=1.6",
    "fitdecode>=0.11",
    "lxml>=5.0",          # TCX (XML)
    # Data
    "pandas>=2.2",
    # Config & CLI
    "pyyaml>=6.0",
    "click>=8.1",
    "rich>=13.0",         # pretty console output
    # Schema validation
    "jsonschema>=4.23",
    # Image generation (OG track images)
    "Pillow>=10.0",
]

[project.optional-dependencies]
classifier = [
    "scikit-learn>=1.5",
]
edit = [
    "fastapi>=0.110",
    "uvicorn[standard]>=0.29",
    "python-multipart>=0.0.9",
]
serve = [
    "fastapi>=0.110",
    "uvicorn[standard]>=0.29",
    "python-multipart>=0.0.9",
    "bcrypt>=4.1",
]
strava = [
    "requests>=2.32",
]
garmin = [
    "garminconnect>=0.2",
    "cryptography>=42.0",
]
dev = [
    "pytest>=9.0",
    "pytest-cov>=5.0",
    "ruff>=0.9",
    "mypy>=1.11",
    "types-pyyaml",
    "types-jsonschema",
]
docs = [
    "mkdocs-material>=9.5",
]

[project.scripts]
bincio = "bincio.cli:main"

[dependency-groups]
dev = [
    "pytest>=9.0",
    "pytest-cov>=5.0",
    "ruff>=0.9",
    "mypy>=1.11",
    "types-pyyaml",
    "types-jsonschema",
    "mkdocs-material>=9.5",
    # serve/edit extras pulled in so test_db.py and test_server_imports.py pass in CI
    "fastapi>=0.110",
    "uvicorn[standard]>=0.29",
    "python-multipart>=0.0.9",
    "bcrypt>=4.1",
    "httpx>=0.28.1",
]

[tool.ruff]
line-length = 100
target-version = "py312"

[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "SIM"]
ignore = ["E501"]

[tool.mypy]
python_version = "3.12"
strict = true
ignore_missing_imports = true

[tool.pytest.ini_options]
testpaths = ["tests"]
markers = [
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
    "integration: marks tests requiring real activity files",
]
