"""
全局配置：本地路径与资源 URL。

设计目标：
- 后端"处理类"操作（读写 JSON / OCR / 生成 TTS 文件）统一使用本地路径，
  基准为主工作空间 $workhome。
- 返回给前端的"资源类"地址统一用 $host + uri 形式（$host 为空时返回同源相对
  uri，由 Nginx 同源代理）。
- $workhome 与 $host 在不同环境下均可通过环境变量覆盖。

环境变量：
- EASYSTUDY_WORKHOME   主工作空间路径（默认按操作系统选择）
- EASYSTUDY_HOST       资源访问 host，如 http://192.168.11.94（默认空 = 同源相对路径）
- EASYSTUDY_DATA_DIR   结构化/索引/拼读数据目录（默认 $workhome/data）
- EASYSTUDY_IMAGES_DIR 绘本图片目录（默认 $workhome/images）
- EASYSTUDY_TTS_DIR    TTS 输出目录（默认 $workhome/audio/tts-words）
- EASYSTUDY_PHONICS_FILE 拼读数据文件（默认 $data_dir/phonics-data.json）
- EASYSTUDY_CORS_ORIGINS 允许的 CORS 源，逗号分隔
"""
from __future__ import annotations

import os
import platform
from pathlib import Path


def _default_workhome() -> str:
    """按操作系统返回默认主工作空间（Nginx 静态根 / 资源根）。"""
    if platform.system() == "Windows":
        return r"E:\nginx-1.8.0\html"
    return "/data/easystudy/static"


def _path_env(env_key: str, default: Path) -> Path:
    """读取路径型环境变量，未设置时回退默认值。"""
    val = os.environ.get(env_key)
    return Path(val) if val else default


# 代码仓库根目录（backend/app/config.py -> backend -> repo root）
_REPO_ROOT: Path = Path(__file__).resolve().parents[2]


# === 可配置基准 ===
# $workhome：本地文件读写基准目录（= Nginx 静态汇总根，所有资源经软链接汇总于此）
WORKHOME: Path = Path(os.environ.get("EASYSTUDY_WORKHOME", _default_workhome()))

# $host：资源访问基准 URL（为空时返回同源相对 uri）
HOST: str = os.environ.get("EASYSTUDY_HOST", "").rstrip("/")


# === 本地处理路径（基于 $workhome，均可单独覆盖） ===
# 说明：$workhome 下各子目录通过软链接汇总（见 deploy/nginx/win-link.bat / linux-link.sh），
#       因此 "本地路径子目录" 与 "Nginx URI" 一一对应（如 $workhome/data <-> /data/）。
DATA_DIR: Path = _path_env("EASYSTUDY_DATA_DIR", WORKHOME / "data")
STRUCTURED_DIR: Path = DATA_DIR / "book-structured"
OCR_DIR: Path = DATA_DIR / "book-ocr"
BOOK_INDEX_FILE: Path = DATA_DIR / "book-index.json"
# 拼读源数据为后端内部输入（不经 Nginx 对外提供），默认指向其真实位置（旧词库模块）
PHONICS_FILE: Path = _path_env("EASYSTUDY_PHONICS_FILE", _REPO_ROOT / "251228-words" / "phonics-data.json")
IMAGES_DIR: Path = _path_env("EASYSTUDY_IMAGES_DIR", WORKHOME / "images")
TTS_OUTPUT_DIR: Path = _path_env("EASYSTUDY_TTS_DIR", WORKHOME / "audio" / "tts-words")

# 音素发音音频目录（IPA -> NN.mp3，供拼读系统播放；对应 Nginx /audio/phonemes/）
PHONEMES_AUDIO_DIR: Path = _path_env(
    "EASYSTUDY_PHONEMES_DIR", _REPO_ROOT / "251228-words" / "audio" / "pho-v1"
)
# 音素映射表（IPA -> NN.mp3）
PHONEME_MAP_FILE: Path = _path_env(
    "EASYSTUDY_PHONEME_MAP", _REPO_ROOT / "251228-words" / "phoneme.json"
)


# === CORS ===
_DEFAULT_CORS = "http://localhost:5173,http://localhost:8000,http://localhost,http://192.168.11.94"
CORS_ORIGINS: list[str] = [
    o.strip()
    for o in os.environ.get("EASYSTUDY_CORS_ORIGINS", _DEFAULT_CORS).split(",")
    if o.strip()
]


# === 资源 URI 前缀（与 Nginx location 对齐） ===
IMAGES_URI = "/images"            # /images/{stage}/{book}/{file}
TTS_URI = "/audio/tts-words"      # /audio/tts-words/{word}.mp3


def resource_url(uri: str) -> str:
    """把资源 uri 拼成可访问地址：$host 非空返回 host+uri，否则返回同源相对 uri。"""
    if not uri.startswith("/"):
        uri = "/" + uri
    return f"{HOST}{uri}" if HOST else uri


def image_url(stage: str, book_folder: str, file: str) -> str:
    """绘本页图片的访问地址（$host + /images/{stage}/{book}/{file}）。"""
    return resource_url(f"{IMAGES_URI}/{stage}/{book_folder}/{file}")


def tts_url(word: str) -> str:
    """单词 TTS 发音的访问地址（$host + /audio/tts-words/{word}.mp3）。"""
    return resource_url(f"{TTS_URI}/{word}.mp3")
