"""
Configuration Loader for DS_L10N
YAML 설정 파일 로더
"""
import yaml
from pathlib import Path
from typing import Dict, Any


class Config:
    """설정 관리 클래스"""

    def __init__(self, config_path: Path):
        self.config_path = config_path
        self.data: Dict[str, Any] = {}
        self.base_dir = config_path.parent
        self.load()

    def load(self):
        """YAML 설정 파일 로드"""
        if not self.config_path.exists():
            raise FileNotFoundError(f"설정 파일을 찾을 수 없습니다: {self.config_path}")

        with open(self.config_path, 'r', encoding='utf-8') as f:
            self.data = yaml.safe_load(f)

    def get(self, key: str, default=None):
        """설정 값 가져오기 (점 표기법 지원)"""
        keys = key.split('.')
        value = self.data

        for k in keys:
            if isinstance(value, dict):
                value = value.get(k)
            else:
                return default

            if value is None:
                return default

        return value

    def get_path(self, key: str, default=None) -> Path:
        """경로 설정 가져오기 (상대 경로를 절대 경로로 변환)"""
        value = self.get(key, default)
        if value is None:
            return None

        path = Path(value)

        # 상대 경로면 base_dir 기준으로 절대 경로 변환
        if not path.is_absolute():
            path = (self.base_dir / path).resolve()

        return path

    def get_all_paths(self) -> Dict[str, Path]:
        """모든 경로 설정 가져오기"""
        paths_config = self.get('paths', {})
        return {key: self.get_path(f'paths.{key}') for key in paths_config.keys()}

    def get_languages(self) -> Dict[str, Any]:
        """언어 설정 가져오기"""
        return {
            'source': self.get('languages.source', 'ko'),
            'targets': self.get('languages.targets', [])
        }

    def get_validation_config(self) -> Dict[str, bool]:
        """검증 설정 가져오기"""
        return self.get('validation', {})

    def __getitem__(self, key: str):
        """딕셔너리 스타일 접근"""
        return self.get(key)

    def __repr__(self):
        return f"Config(config_path={self.config_path})"


def load_config(config_path: Path = None) -> Config:
    """설정 파일 로드"""
    if config_path is None:
        # 현재 스크립트 위치 기준으로 config.yaml 찾기
        config_path = Path(__file__).parent.parent / 'config.yaml'

    return Config(config_path)
