o
    ,i                     @   s   d Z ddlZddlZddlmZmZ ddlmZm	Z	 ddl
mZ ddlmZ eded	d
 Zedeedd Zededd ZdS )u   
교량 관련 API
    N)jsonifysession)clean_dataframe_dataget_db_connection)login_required   )api_bpz/bridge_listc            	   
   C   s  z]t  } |  }|d | du}|r#|dtd f g d}n|dtd f g d}| }g }|D ]}tt||}|| q8|	  | 	  t
d|  td	|d
W S  ty } zt
dt|  tdt|ddfW  Y d}~S d}~ww )u(   현재 사용자의 교량 목록 조회z
            SELECT column_name
            FROM information_schema.columns
            WHERE table_name = 'uploaded_files' AND column_name = 'plan_type'
        NaT  
                SELECT "id","user_id","filename","original_filename","upload_date","file_data",
                       "bridge_name","length","width","structure_type","span_count","expansion_joint_location","plan_type"
                FROM uploaded_files
                WHERE user_id = %s
                ORDER BY bridge_name
            user_id)idr	   filenameoriginal_filenameupload_date	file_databridge_namelengthwidthstructure_type
span_countexpansion_joint_location	plan_typeaH  
                SELECT "id","user_id","filename","original_filename","upload_date","file_data",
                       "bridge_name","length","width","structure_type","span_count","expansion_joint_location"
                FROM uploaded_files
                WHERE user_id = %s
                ORDER BY bridge_name
            )r
   r	   r   r   r   r   r   r   r   r   r   r   u   추출된 교량 목록: T)successbridgeszError getting bridge list: Fr   error  )r   cursorexecutefetchoner   fetchalldictzipappendcloseprintr   	Exceptionstr)	conncurhas_plan_typecolumnsresultsr   rowbridgee r.   9/home/skpark/git/infrasmart_work/infrasmart/api/bridge.pyget_bridge_list   sH   


r0   z/bridge_data/<filename>c                 C   sJ  zt  }| }|d| td f | }|s"tddddfW S |d }i }|rt|tr4t	|}t
|}t|}|d  D ]m}||d |k }|g d	d
dg   }	g ||< |	 D ]K\}
}t|d t|d t|d t
|d
 rt|d
 ndt
|d rt|d ndt
|ddrt|ddndd}|| | qdqC|d pd|d rt|d nd|d rt|d nd|d pd|d rt|d nd|d pdt|d |r|ni d}|  |  td|dW S  ty$ } ztdt|  tdt|ddfW  Y d }~S d }~ww )Nz
            SELECT bridge_name, length, width, structure_type, span_count,
                   expansion_joint_location, file_data
            FROM uploaded_files
            WHERE filename = %s AND user_id = %s
        r	   Fu"   파일을 찾을 수 없습니다.r        	   부재명)   부재위치   손상내용   단위u   손상물량u   개소r4   r5   r6   r   u   점검면적d   )positiondamage_typeunitdamage_quantitycountinspection_area r               )r   r   r   r   r   r   has_file_datadamage_dataT)r   datau$   교량 데이터 조회 중 오류: r   )r   r   r   r   r   r   
isinstancer%   jsonloadspd	DataFramer   uniquegroupbysumreset_indexiterrowsnotnullfloatintgetr!   boolr"   r$   r#   )r   r&   r'   resultfile_data_jsonrD   df	componentcomponent_dfcomponent_summary_r+   damage_itembridge_datar-   r.   r.   r/   get_bridge_dataJ   sx   






$





r^   z /bridge/<bridge_name>/componentsc           	   
   C   s  zbt  }| }|d| td f | }|s"tddddfW S |d }t|tr0t	|}g }t|t
rSt|dkrS|D ]}|dd	}|rR||vrR|| q?|  |  td
|dW S  ty } ztdt|  tdt|ddfW  Y d}~S d}~ww )u   교량의 부재 목록 조회z
            SELECT file_data
            FROM uploaded_files
            WHERE bridge_name = %s AND user_id = %s
            LIMIT 1
        r	   Fu"   교량을 찾을 수 없습니다.r   r1   r   r3   r>   T)r   
componentsz!Error getting bridge components: r   N)r   r   r   r   r   r   rF   r%   rG   rH   listlenrS   r!   r"   r$   r#   )	r   r&   r'   rU   r   r_   recordrX   r-   r.   r.   r/   get_bridge_components   sP   




rc   )__doc__rG   pandasrI   flaskr   r   utils.commonr   r   utils.decoratorsr   r>   r   router0   r^   rc   r.   r.   r.   r/   <module>   s"    <R