# ── MARK LIV — Python dependencies ────────────────────────────────────────────
# pip skips any line whose sys_platform marker does not match your OS, so this
# one file serves Windows, macOS and Linux. `python setup.py` runs it for you.

# Version bounds: the lower bound is what the app is developed against, the
# upper bound stops the next MAJOR release of a dependency from breaking every
# fresh clone on the day it ships. Minor and patch updates flow in freely.

# ── Core: UI, audio, Gemini Live ──────────────────────────────────────────────
# PyQt6 and numpy also carry the holographic avatar: the head is rendered in
# software with QPainter and posed with numpy, so the face costs no extra
# package, no OpenGL and no GPU. Nothing below was added for it.
PyQt6>=6.6,<7
sounddevice>=0.4,<1
numpy>=1.24,<3
google-genai>=2.8.0,<3

# ── Web search & browser control ──────────────────────────────────────────────
requests>=2.31,<3
beautifulsoup4>=4.12,<5
playwright>=1.40,<2

# ── Automation / input control ────────────────────────────────────────────────
pyautogui
pyperclip
pygetwindow

# ── Vision & media ────────────────────────────────────────────────────────────
pillow>=10,<13
opencv-python>=4.8,<5
mss>=9,<11

# ── System, files & documents ─────────────────────────────────────────────────
psutil>=5.9,<8
send2trash
youtube-transcript-api
python-pptx
openpyxl

# ── Remote dashboard (control from your phone) ────────────────────────────────
fastapi>=0.110,<1
uvicorn[standard]>=0.27,<1
cryptography>=42,<50
python-multipart>=0.0.9,<1
qrcode[pil]>=7,<9

# ── Plugin extras: Gmail / Google Calendar (OAuth) ────────────────────────────
google-api-python-client
google-auth-oauthlib

# ── Plugin extras: Tuya / Smart Life smart light (home_assistant) ─────────────
tinytuya

# ── Windows-only (pip skips these automatically on macOS / Linux) ─────────────
comtypes;   sys_platform == "win32"
pycaw;      sys_platform == "win32"
win10toast; sys_platform == "win32"
pywinauto;  sys_platform == "win32"
pywin32;    sys_platform == "win32"
wmi;        sys_platform == "win32"

# ── Documents, media & hardware readouts ──────────────────────────────────────
# Every one of these is imported inside a try/except at the point of use, so a
# missing package disables exactly one feature and never stops the app. They are
# declared because a feature that silently does nothing is worse than a slightly
# longer install.
ddgs>=9,<10                  # web_search — the maintained successor to
                             # duckduckgo-search, which is tried first and
                             # falls back to the old name automatically
pdfplumber                   # file_processor — PDF text and tables
PyPDF2                       # file_processor — PDF fallback reader
python-docx                  # file_processor — .docx reading
paho-mqtt                    # printer_control plugin — MQTT printers
pynvml                       # system_monitor + the HUD's GPU meter (NVIDIA)

# ── Optional: heavy extras, install only if you want the feature ──────────────
# Left out on purpose — together they are several hundred megabytes, which is a
# lot to download for a fresh clone that may never use them.
#
#   pip install pandas       # file_processor: spreadsheet/CSV analysis
#   pip install pydub        # file_processor: audio metadata and conversion
#                            #   (also needs ffmpeg on PATH for most formats)
#   pip install mediapipe    # pushup_counter: elbow-angle rep detection

# ── Optional: local wake word ("Hey Jarvis") ──────────────────────────────────
# Deliberately NOT installed by default — it's opt-in. Enable it (and download
# the tiny model) with one click from ⚙ → WAKE WORD in the app, or install it
# yourself with:  pip install openwakeword
#
# macOS / Linux OS actions (volume, brightness, reminders) shell out to native
# tools (pactl / brightnessctl / osascript / systemd), so no extra Python
# packages are needed there — nothing Windows-specific is ever pulled in.
