o
     gh                     @   s   d Z ddlmZmZmZ ddlZddlZddlm	Z	 ddl
mZmZ ddlmZ e	jdd	gd
dd Ze	jddgd
dd Ze	jddgd
dd Ze	jdd	gd
dd ZdS )u,   
교량 상태평가표 API 엔드포인트
    )requestjsonifysessionN   )api_bp)get_db_connectionclean_dataframe_data)"generate_all_component_evaluationsz/bridge_evaluation/<filename>GET)methodsc              
   C   s.  zfdt vrtddidfW S t }| }|d| t d f | }|s.tddidfW S |d }|d	 p7d
}|d p=d}t|trHt	|}t
|}t|}|  |  t|}td|||dW S  ty }	 z$tdt|	  ddl}
|
  tddt|	 idfW  Y d}	~	S d}	~	ww )uN   
    파일명을 기반으로 교량 상태평가표를 생성합니다.
    user_iderror   로그인이 필요합니다.  zfSELECT file_data, bridge_name, structure_type FROM uploaded_files WHERE filename = %s AND user_id = %s"   파일을 찾을 수 없습니다.  r   r   u   교량명 없음   u   PSC 박스거더교T)successbridge_namestructure_typeevaluation_htmlu#   상태평가표 생성 중 오류: Nu9   상태평가표 생성 중 오류가 발생했습니다:   )r   r   r   cursorexecutefetchone
isinstancestrjsonloadspd	DataFramer   closer	   	Exceptionprint	traceback	print_exc)filenameconncurresult	file_datar   r   dfr   er$    r-   =/home/skpark/git/infrasmart_work/infrasmart/api/evaluation.pyget_bridge_evaluation   sF   




&r/   z/component_evaluationPOSTc               
   C   sn  zdt vrtddidfW S t } | d}| d}|r |s)tddidfW S t }| }|d	|t d f | }|sItdd
idfW S |d }t	|t
rWt|}t|}t|}|  |  ||d j
j|dd }|jrtdd| ddW S t|}	td|	dW S  ty }
 ztdt
|
  tddt
|
 idfW  Y d}
~
S d}
~
ww )u;   
    특정 부재의 상태평가를 수행합니다.
    r   r   r   r   component_typer&   u.   부재 타입과 파일명이 필요합니다.  zISELECT file_data FROM uploaded_files WHERE filename = %s AND user_id = %sr   r   r   u	   부재명F)naTz<p>u)    부재의 데이터가 없습니다.</p>)r   r   u#   부재별 상태평가 중 오류: u9   부재별 상태평가 중 오류가 발생했습니다: r   N)r   r   r   get_jsongetr   r   r   r   r   r   r   r   r   r    r   r!   containsemptyr	   r"   r#   )datar1   r&   r'   r(   r)   r*   r+   component_dfr   r,   r-   r-   r.   get_component_evaluation@   sP   








&r:   z/save_evaluation_resultc               
   C   s   zQdt vrtddidfW S t } | d}| d}|r |s)tddidfW S t }| }|d	t d |t	|f |
  |  |  td
ddW S  tyy } ztdt|  tddt| idfW  Y d}~S d}~ww )u1   
    상태평가 결과를 저장합니다.
    r   r   r   r   r&   evaluation_datau1   파일명과 평가 데이터가 필요합니다.r2   a2  
            INSERT INTO evaluation_results (user_id, filename, evaluation_data, created_at)
            VALUES (%s, %s, %s, NOW())
            ON CONFLICT (user_id, filename)
            DO UPDATE SET 
                evaluation_data = EXCLUDED.evaluation_data,
                updated_at = NOW()
        Tu-   상태평가 결과가 저장되었습니다.r   messageu'   상태평가 결과 저장 중 오류: u=   상태평가 결과 저장 중 오류가 발생했습니다: r   N)r   r   r   r4   r5   r   r   r   r   dumpscommitr!   r"   r#   r   )r8   r&   r;   r'   r(   r,   r-   r-   r.   save_evaluation_result~   s2   

	
&r@   z/evaluation_history/<filename>c              
   C   s  z`dt vrtddidfW S t }| }|dt d | f | }|  |  |s5tdddW S |d	 }t|trCt	
|}td
||d rP|d  nd|d r[|d  nddW S  ty } ztdt|  tddt| idfW  Y d}~S d}~ww )u;   
    저장된 상태평가 결과를 조회합니다.
    r   r   r   r   z
            SELECT evaluation_data, created_at, updated_at
            FROM evaluation_results
            WHERE user_id = %s AND filename = %s
        Fu(   저장된 평가 결과가 없습니다.r<   r   Tr   Nr   )r   r;   
created_at
updated_atu'   상태평가 이력 조회 중 오류: u=   상태평가 이력 조회 중 오류가 발생했습니다: r   )r   r   r   r   r   r   r!   r   r   r   r   	isoformatr"   r#   )r&   r'   r(   r)   r;   r,   r-   r-   r.   get_evaluation_history   s<   




&rD   )__doc__flaskr   r   r   pandasr   r    r   utils.commonr   r   utils.bridge_evaluationr	   router/   r:   r@   rD   r-   r-   r-   r.   <module>   s    
4
=
*