
    i                        d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
 	 ddlZdZ ed	      Zd
ZdZe G d d             ZddZddZdddZy# e$ r dZdZY 4w xY w)u  YAML 설정 중앙화 모듈.

단일 YAML 파일에서 시스템 설정을 로드하고 환경변수 오버라이드를 지원한다.
점 표기법(dot notation)으로 중첩 키에 접근 가능.

YAML 미설치 시에도 graceful fallback (환경변수만 사용).

Usage:
    from utils.config_loader import load_config
    cfg = load_config()
    model = cfg.get("models.default", "claude-sonnet-4-6")
    )annotationsN)	dataclassfield)Path)AnyTFz&/home/jay/workspace/config/system.yamlSYSTEM__c                  V    e Zd ZU dZ ee      Zded<    eed      Zded<   ddd
Z	y	)Configu   시스템 설정 컨테이너.

    점 표기법으로 중첩 키에 접근한다.
    예: config.get("models.default", "claude-sonnet-4-6")
    )default_factorydict[str, Any]dataF)r   reprdict[str, str]
_overridesNc                   |j                         j                  dt              }|| j                  v r| j                  |   S |j	                  d      }| j
                  }|D ]#  }t        |t              s|c S ||vr|c S ||   }% |S )u;  점 표기법으로 값을 조회한다.

        환경변수 오버라이드가 YAML 값보다 우선한다.

        Args:
            key: 점 구분 키 (예: "models.default").
            default: 키가 없을 때 반환할 기본값.

        Returns:
            해당 키의 값 또는 default.
        .)lowerreplace_ENV_SEPr   splitr   
isinstancedict)selfkeydefaultoverride_keypartscurrentparts          D/home/jay/workspace/.worktrees/task-2116-dev1/utils/config_loader.pygetz
Config.get0   s     yy{**394??*??<00 		#yy 	$Dgt,7"dmG	$     N)r   strr   r   returnr   )
__name__
__module____qualname____doc__r   r   r   __annotations__r   r"    r#   r!   r   r   %   s.     !6D.6!&t%!HJHr#   r   c                     t         } i }t        j                  j                         D ]8  \  }}|j	                  |       s|t        |       d j                         }|||<   : |S )u   SYSTEM_ 접두사를 가진 환경변수를 수집한다.

    SYSTEM_MODELS_DEFAULT=value → {"models_default": "value"}
    (접두사 제거, 소문자 변환)
    N)_ENV_PREFIXosenvironitems
startswithlenr   )prefix	overridesenv_keyenv_valstrippeds        r!   _collect_env_overridesr9   M   sh     F "IJJ,,. *f%s6{}-335H")Ih	*
 r#   c                    t         rt        i S | j                         si S 	 t        | d      5 }t        j                  |      }ddd       t        t              r|S i S # 1 sw Y   xY w# t        $ r i cY S w xY w)u8   YAML 파일을 로드한다. 실패 시 빈 dict 반환.Nzutf-8)encoding)_YAML_AVAILABLE_yaml_moduleexistsopen	safe_loadr   r   	Exception)pathfresults      r!   
_load_yamlrE   ]   s|    l2	;;=	$) 	/Q!++A.F	/fd#M			/ 	/
  	s.   A- A!A- A- !A*&A- -A;:A;c                n    | t         }nt        |       }t        |      }t               }t	        ||      S )u&  YAML 설정 파일을 로드하고 환경변수 오버라이드를 적용한다.

    Args:
        path: YAML 파일 경로. None이면 기본 경로 사용.
              존재하지 않는 경로는 빈 Config 반환 (환경변수만 사용).

    Returns:
        Config 인스턴스.
    )r   r   )_DEFAULT_CONFIG_PATHr   rE   r9   r   )rB   resolvedr   r5   s       r!   load_configrI   m   s6     |':hD&(It	22r#   )r&   r   )rB   r   r&   r   r$   )rB   zstr | Path | Noner&   r   )r*   
__future__r   r/   dataclassesr   r   pathlibr   typingr   yamlr=   r<   ImportErrorrG   r.   r   r   r9   rE   rI   r,   r#   r!   <module>rP      s    # 	 (  O
 DE   $ $ $N  3g  LOs   A 	AA