o
     gh9                     @   s   d Z ddlmZmZmZ ddlZddlmZ deee	ef  dee	ej
f fddZd	ee	ej
f dee	ef fd
dZd	ee	ej
f dej
fddZde	de	defddZdS )u:   
보수 데이터 처리를 위한 유틸리티 함수들
    )ListDictAnyN)clean_dataframe_datadamage_datareturnc                 C   sT   t | }t|}|d}i }|D ]\}}|g d }|ddg}|||< q|S )u   
    손상 데이터로부터 보수 테이블을 생성합니다.
    
    Args:
        damage_data (List[Dict[str, Any]]): 손상 데이터 리스트
        
    Returns:
        Dict[str, pd.DataFrame]: 보수 테이블들을 담은 딕셔너리
    repair_method)locationdamage_typeseverityr   estimated_costr	   r
   )pd	DataFramer   groupbysort_values)r   dfrepair_groupsrepair_tablesmethodgrouptable r   A/home/skpark/git/infrasmart_work/infrasmart/utils/repair_utils.pygenerate_repair_tables   s   


r   r   c                 C   s.   i }|   D ]\}}|d  }|||< q|S )u  
    보수 테이블로부터 각 보수 방법별 예상 비용을 계산합니다.
    
    Args:
        repair_tables (Dict[str, pd.DataFrame]): 보수 테이블들
        
    Returns:
        Dict[str, float]: 보수 방법별 총 예상 비용
    r   )itemssum)r   costsr   r   
total_costr   r   r   calculate_repair_costs+   s
   

r   c                 C   sl   g }|   D ]*\}}d}| D ]\}}||d |d ||t|d ||d d |d7 }qqt|S )u   
    보수 일정을 생성합니다.
    
    Args:
        repair_tables (Dict[str, pd.DataFrame]): 보수 테이블들
        
    Returns:
        pd.DataFrame: 보수 일정 테이블
       r	   r
   r   )r	   r
   r   priorityestimated_durationr   )r   iterrowsappendcalculate_durationr   r   )r   schedule_datar   r   r    _rowr   r   r   generate_repair_schedule=   s   


r(   r
   r   c                 C   sT   ddddddddddd
}ddddddddddddd	}| |d| | d }|S )
u   
    손상 유형과 보수 방법에 따른 예상 소요 시간을 계산합니다.
    
    Args:
        damage_type (str): 손상 유형
        repair_method (str): 보수 방법
        
    Returns:
        int: 예상 소요 시간(일)
       r               
   )
u   주입공법u   표면처리공법u   방수공법u   단면보수u   단면복구u   방청처리u   교체u	   재설치u   기초보강u   표면보수)u   균열u   누수u   백태u   박리u   철근노출u   파손u   부식u   단차u   침하u   들뜸u   마모u   탈락)get)r
   r   base_durationsadditional_durationstotal_durationr   r   r   r$   Y   s4   r$   )__doc__typingr   r   r   pandasr   utils.commonr   strr   r   floatr   r(   intr$   r   r   r   r   <module>   s    ($#