"""
配置模組 - 定義語音選項、路徑和風格設定
"""

from pathlib import Path
from dataclasses import dataclass
from typing import Optional

# ===== 路徑設定 =====
PROJECT_ROOT = Path(__file__).parent.parent
REPO_ROOT = PROJECT_ROOT.parent.parent  # Research_zoo 根目錄
RESEARCH_DIR = REPO_ROOT / "research"
AUDIO_DIR = REPO_ROOT / "audio"
OUTPUT_DIR = PROJECT_ROOT / "output"


# ===== 語音設定 =====
@dataclass
class VoiceConfig:
    """語音配置"""
    voice_id: str
    name: str
    gender: str
    description: str


# 台灣中文語音選項
VOICES = {
    "female_1": VoiceConfig(
        voice_id="zh-TW-HsiaoChenNeural",
        name="曉臻",
        gender="女",
        description="標準台灣腔，清晰專業"
    ),
    "female_2": VoiceConfig(
        voice_id="zh-TW-HsiaoYuNeural",
        name="曉雨",
        gender="女",
        description="較柔和的女聲"
    ),
    "male": VoiceConfig(
        voice_id="zh-TW-YunJheNeural",
        name="雲哲",
        gender="男",
        description="專業男聲，適合商務匯報"
    ),
}

# 預設語音
DEFAULT_VOICE = "female_1"


# ===== 語音風格設定 =====
@dataclass
class StyleConfig:
    """語音風格配置"""
    name: str
    rate: str       # 語速調整 (-50% ~ +100%)
    pitch: str      # 音調調整
    description: str


STYLES = {
    "formal": StyleConfig(
        name="正式商務",
        rate="-10%",
        pitch="+0Hz",
        description="較慢語速，標準音調，適合正式場合"
    ),
    "professional": StyleConfig(
        name="輕鬆專業",
        rate="+0%",
        pitch="+5Hz",
        description="正常語速，稍高音調，日常使用"
    ),
    "secretary": StyleConfig(
        name="秘書匯報",
        rate="+10%",
        pitch="+0Hz",
        description="稍快語速，清晰明確，適合快速掌握重點"
    ),
    "fast": StyleConfig(
        name="快速瀏覽",
        rate="+20%",
        pitch="+0Hz",
        description="快速語速，適合熟悉內容時使用"
    ),
}

# 預設風格
DEFAULT_STYLE = "secretary"


# ===== 輸出設定 =====
@dataclass
class OutputConfig:
    """輸出配置"""
    format: str = "mp3"
    bitrate: str = "128k"  # 語音建議 128kbps


# ===== 摘要區塊標記 =====
SUMMARY_START_MARKER = "## 📋 快速摘要"
SUMMARY_END_MARKER = "---"  # 快速摘要結束於第一個分隔線
FULL_REPORT_MARKER = "## 📖 完整研究報告"


def get_voice(voice_key: Optional[str] = None) -> VoiceConfig:
    """取得語音配置"""
    key = voice_key or DEFAULT_VOICE
    if key not in VOICES:
        raise ValueError(f"未知的語音選項: {key}，可用選項: {list(VOICES.keys())}")
    return VOICES[key]


def get_style(style_key: Optional[str] = None) -> StyleConfig:
    """取得風格配置"""
    key = style_key or DEFAULT_STYLE
    if key not in STYLES:
        raise ValueError(f"未知的風格選項: {key}，可用選項: {list(STYLES.keys())}")
    return STYLES[key]


def ensure_directories():
    """確保必要的目錄存在"""
    AUDIO_DIR.mkdir(parents=True, exist_ok=True)
    OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
