"""
테스트용 샘플 코드 - 의도적으로 인터페이스 문제가 있는 코드들.

이 파일은 Gar의 인터페이스 리뷰 기능을 테스트하기 위한 것입니다.
"""


def get_user(user_id: int) -> dict:
    """사용자 정보를 반환합니다.
    
    Args:
        user_id: 사용자 ID
        
    Returns:
        사용자 정보 딕셔너리. 사용자가 없으면 None을 반환합니다.
    """
    if user_id < 0:
        return None  # 타입힌트는 dict인데 None 반환 가능
    return {"id": user_id, "name": "Test User"}


def calculate_total(items: list) -> float:
    """아이템들의 총합을 계산합니다.
    
    Args:
        items: 숫자 리스트
        
    Returns:
        총합
    """
    # 타입힌트가 list인데 실제로는 list[int] 또는 list[float]를 기대
    return sum(items)


class UserService:
    """사용자 서비스 클래스."""
    
    def create_user(self, name: str, email: str) -> dict:
        """사용자를 생성합니다.
        
        Args:
            name: 사용자 이름
            email: 이메일 주소
            
        Returns:
            생성된 사용자 정보
        """
        return {"name": name, "email": email}
    
    def update_user(self, user_id: int, name: str) -> dict:
        """사용자 정보를 업데이트합니다.
        
        Args:
            user_id: 사용자 ID
            name: 새로운 이름
            
        Returns:
            업데이트된 사용자 정보. 사용자가 없으면 None을 반환합니다.
        """
        if user_id <= 0:
            return None  # 타입힌트는 dict인데 None 반환 가능
        return {"id": user_id, "name": name}


# 브레이킹 체인지 예시: 기존 함수 시그니처 변경
def process_order(order_id: int, items: list[int]) -> dict:
    """주문을 처리합니다.
    
    기존 버전: process_order(order_id: int, items: list) -> dict
    변경됨: items의 타입이 list[int]로 명시됨 (하위 호환성 문제 가능)
    """
    return {"order_id": order_id, "items": items, "status": "processed"}


# 네이밍 문제 예시
def get_data():  # 타입힌트 없음, 반환 타입 불명확
    """데이터를 가져옵니다."""  # docstring이 모호함
    return {"data": "some data"}


def fetch_user_info(user_id):  # 타입힌트 없음
    """사용자 정보를 가져옵니다."""  # get_user와 유사한 기능인데 이름이 다름
    return {"id": user_id}