"""Configuration loading for Gar
Gac의 config.py 스타일을 참고하여 환경 변수와 .gar.env 파일을 지원.
"""

import os
from pathlib import Path
from typing import TypedDict

from dotenv import load_dotenv


class GarConfig(TypedDict, total=False):
    """TypedDict for Gar configuration values"""

    model: str | None
    llm_base_url: str | None
    temperature: float
    max_output_tokens: int
    max_retries: int
    language: str | None


def load_config() -> GarConfig:
    """Load configuration from ./.env (project root) and environment variables"""
    # 1. 프로젝트 .env 로드
    project_env = Path(".env")
    if project_env.exists():
        load_dotenv(project_env, override=True)

    # 2. 환경 변수에서 읽기 (따옴표 제거 포함)
    model_value = os.getenv("GAR_MODEL")
    if model_value:
        # .env 파일에서 따옴표로 감싼 값 처리 ('value' 또는 "value")
        model_value = model_value.strip().strip("'\"")
        if not model_value:
            model_value = None

    # LLM Base URL 처리 (따옴표 제거)
    base_url_value = os.getenv("GAR_LLM_BASE_URL")
    if base_url_value:
        base_url_value = base_url_value.strip().strip("'\"")
        if not base_url_value:
            base_url_value = None

    config: GarConfig = {
        "model": model_value,
        "llm_base_url": base_url_value,  # 기본값 없음 - 사용자가 설정해야 함
        "temperature": float(os.getenv("GAR_TEMPERATURE", "0.2")),
        "max_output_tokens": int(os.getenv("GAR_MAX_OUTPUT_TOKENS", "2048")),
        "max_retries": int(os.getenv("GAR_MAX_RETRIES", "3")),
        "language": os.getenv("GAR_LANGUAGE", "Korean"),
    }

    return config
