from pathlib import Path
from typing import Any

import yaml


PROJECT_ROOT = Path(__file__).resolve().parents[1]
CONFIG_PATH = PROJECT_ROOT / "config.yaml"

_settings: dict[str, Any] | None = None


def load_config() -> dict[str, Any]:
    if not CONFIG_PATH.exists():
        raise FileNotFoundError(f"配置文件不存在：{CONFIG_PATH}")

    with CONFIG_PATH.open(encoding="utf-8") as file:
        data = yaml.safe_load(file) or {}

    return data


def get_settings() -> dict[str, Any]:
    global _settings
    if _settings is None:
        _settings = load_config()
    return _settings


def get_project_path(relative: str) -> Path:
    return PROJECT_ROOT / relative


def get_prompts_dir() -> Path:
    return get_project_path(get_settings()["paths"]["prompts_dir"])


def get_data_dir() -> Path:
    return get_project_path(get_settings()["paths"]["data_dir"])


def get_output_dir() -> Path:
    return get_project_path(get_settings()["paths"]["output_dir"])


def get_llm_config() -> dict[str, Any]:
    return get_settings()["llm"]


def get_cli_config() -> dict[str, Any]:
    return get_settings()["cli"]


def get_generator_config() -> dict[str, Any]:
    settings = get_settings()
    return settings.get("generator", settings["llm"])
