"""サーバーごとに異なるパス・実行ファイルの場所をまとめて管理する。

値は .env から読み、未設定のときは OS ごとの既定値を使う。
- Windows の既定値は、移行前の本番（VPS226）と同じ値にしてあるため、
  .env に何も足さなくても今までと同じ動作になる。
- Linux の既定値は、移行先（Ubuntu 24.04）の標準的な配置。

使い方:
    from config.paths import PYTHON_EXE, SCREENSHOT_DIR, CHROME_PATH
"""
from __future__ import annotations

import os
import sys
from pathlib import Path

from dotenv import load_dotenv

# リポジトリ直下の .env（database.py と同じ場所）を読み込む
_REPO_ROOT = Path(__file__).resolve().parents[2]
load_dotenv(dotenv_path=_REPO_ROOT / ".env")

IS_WINDOWS = sys.platform == "win32"


def _env_str(key: str, windows_default: str, linux_default: str) -> str:
    value = (os.getenv(key) or "").strip()
    if value:
        return value
    return windows_default if IS_WINDOWS else linux_default


def _env_path(key: str, windows_default: str, linux_default: str) -> Path:
    return Path(_env_str(key, windows_default, linux_default))


# アプリ本体（Python 一式）の場所。ロックファイル・作業ファイルの置き場所にも使う
APP_DIR: Path = _env_path(
    "APP_DIR",
    r"C:\apps\ranking_system",
    "/opt/rankradar",
)

# 子プロセスを起動するときの Python（venv の Python を固定で使う）
PYTHON_EXE: str = _env_str(
    "PYTHON_EXE",
    r"C:\apps\ranking_system\venv\Scripts\python.exe",
    "/opt/rankradar/venv/bin/python",
)

# スクリーンショットの保存先（この下に girlsheaven / vanilla を作る）
SCREENSHOT_DIR: Path = _env_path(
    "SCREENSHOT_DIR",
    r"C:\apps\ranking_system\screenshots",
    "/var/lib/rankradar/screenshots",
)

# ログの保存先
LOG_DIR: Path = _env_path(
    "LOG_DIR",
    r"C:\apps\ranking_system\logs",
    "/var/log/rankradar",
)

# バックアップ（mysqldump）の保存先
BACKUP_DIR: Path = _env_path(
    "BACKUP_DIR",
    r"C:\backup",
    "/var/backups/rankradar",
)

# mysqldump の実行ファイル
MYSQLDUMP_PATH: str = _env_str(
    "MYSQLDUMP_PATH",
    r"C:\Program Files\MySQL\MySQL Server 8.4\bin\mysqldump.exe",
    "/usr/bin/mysqldump",
)

# Google Chrome の実行ファイル（Playwright・Selenium 共通）
CHROME_PATH: str = _env_str(
    "CHROME_PATH",
    r"C:\Program Files\Google\Chrome\Application\chrome.exe",
    "/usr/bin/google-chrome",
)


def screenshot_dir(media: str) -> Path:
    """媒体ごとのスクリーンショット保存先（例: screenshot_dir('vanilla')）。"""
    return SCREENSHOT_DIR / media
