# S-CANVAS — Python project metadata + uv-compatible dependency declaration.
#
# 사용법 (uv 권장 — 피드백 #5):
#   uv venv                        # 가상환경 생성 (.venv)
#   uv pip install -e .            # 본 프로젝트 + 일반 deps
#   uv pip install -e ".[py313]"   # Python 3.13 호환 변종
#   uv pip install -e ".[dev]"     # 개발 도구 (ruff, pytest, pre-commit)
#
# 기존 pip 사용자도 호환:
#   pip install -e .
#
# 원본 requirements.txt는 build machine 빌드 재현용으로 보존.

[project]
name = "scanvas"
version = "0.7.0"
description = "S-CANVAS — Generative Design & Visualization Engine (DXF + DEM + AI)"
readme = "README.md"
requires-python = ">=3.9"
license = { text = "Proprietary" }
authors = [
    { name = "Saman Corp.", email = "saman@example.com" },
]
keywords = ["cad", "dxf", "civil-engineering", "3d-visualization", "ai-rendering"]

# 기본 의존성 (build machine 핀 — Py3.9~3.12 검증).
dependencies = [
    # --- GUI ---
    "customtkinter==5.2.2",
    "tkintermapview==1.29",
    "Pillow==11.3.0",

    # --- 3D / mesh ---
    "pyvista==0.46.5",

    # --- Geospatial / DXF ---
    "ezdxf==1.4.2",
    "pyproj==3.6.1",
    "rasterio==1.4.3",

    # --- Numerical ---
    "numpy==2.0.2",
    "scipy==1.13.1",
    "matplotlib==3.9.4",

    # --- Image / video ---
    "opencv-python==4.13.0.92",

    # --- Network ---
    "requests==2.32.5",

    # --- AI rendering ---
    "google-genai==1.47.0",
    "google-auth==2.49.2",

    # --- Persistence / logging ---
    "SQLAlchemy==2.0.49",
    "structlog==25.5.0",
    "PyYAML==6.0.3",
]

[project.optional-dependencies]
# Python 3.13 호환 변종 (wheel 미배포 패키지 핀 변경).
py313 = [
    "pyproj>=3.7,<4",
    "scipy>=1.14",
    "numpy>=2.0.2",
    # 나머지 핀은 base와 동일 (uv가 자동 충돌 해결).
]

# 개발 도구.
dev = [
    "ruff>=0.15",
    "pytest>=8.0",
    "pytest-xdist>=3.5",       # 병렬 테스트
    "pytest-cov>=5.0",         # 커버리지
    "pre-commit>=3.7",
]

# 배포용 .exe 빌드.
build = [
    "pyinstaller==6.18.0",
]

[project.scripts]
scanvas = "scanvas_maker:_cli_entry"  # 향후 CLI 진입점 노출 시 사용 (현재는 GUI 직접 실행)

[project.urls]
Homepage = "https://gitea.hmac.kr/HYUNJUNGLEE/scanvas"
Repository = "https://gitea.hmac.kr/HYUNJUNGLEE/scanvas.git"

# ─────────────────────────────────────────────────────────────────────────
# uv 전용 설정
# ─────────────────────────────────────────────────────────────────────────
[tool.uv]
# uv lock 파일 사용 (재현 가능 환경).
# 명령: `uv lock` → uv.lock 생성/갱신, `uv sync` → 환경 동기화.

# Python 인터프리터 선택 우선순위 (uv가 자동 검색).
python-preference = "managed"  # managed = uv가 직접 받아 관리 (3.13 자동 다운로드 가능)

# 색상/진행률 표시.
no-progress = false

# ─────────────────────────────────────────────────────────────────────────
# 빌드 시스템 (편집 가능 설치 / pip install -e . 가능)
# ─────────────────────────────────────────────────────────────────────────
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
# 단일 모듈 + 패키지 혼합 — root의 .py 파일들과 harness/ 패키지 모두 wheel에 포함.
packages = ["harness"]
include = [
    "*.py",
    "prompt_templates/**/*.yaml",
    "structure_types/**/*.yaml",
]
exclude = [
    "*.bak*",
    "_unused/**",
    "workspace/**",
    "venv*/**",
    "__pycache__/**",
    "test/**",
    "tests/**",
]

# ─────────────────────────────────────────────────────────────────────────
# Tooling — ruff/pytest config는 별도 파일(ruff.toml)에 있음. 여기는 보조 설정만.
# ─────────────────────────────────────────────────────────────────────────
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
addopts = [
    "-ra",                # short test summary for all
    "--strict-markers",
    "--tb=short",
]
markers = [
    "slow: 무거운 통합 테스트 (DXF/렌더 포함)",
    "integration: 외부 서비스 (Gemini API 등) 호출",
]
