o
    Ëh2                     @   s  d Z ddlZddlmZmZmZmZ ddlmZm	Z	 ddl
mZ ddlmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ eeZeddgdZedeeeefdededeeef fddZedddeeeefdede de dededeeef fddZ!e"deeeefdedededefddZ#edeeeefdededeeef fd d!Z$dS )"z[
Admin API endpoints for database management.
Handles table data retrieval and management.
    N)ListDictAnyOptional)textinspect)Session)	APIRouterDependsHTTPExceptionstatus)get_db)get_current_admin_user)User)MessageResponsez
/api/adminadmin)prefixtagsz/tablescurrent_admindbreturnc              
      sv   zt |j}| }ddg  fdd|D }|t|dW S  ty: } ztd|  ttj	ddd	}~ww )
z-Get list of available tables in the database.alembic_versionuser_sessionsc                       g | ]}| vr|qS  r   .0tablesystem_tablesr   ./var/www/html/aiguide_backend/routers/admin.py
<listcomp>#       z(get_available_tables.<locals>.<listcomp>)tablestotalu   ❌ Error getting tables: zError retrieving tablesstatus_codedetailN)
r   bindget_table_nameslen	Exceptionloggererrorr   r   HTTP_500_INTERNAL_SERVER_ERROR)r   r   	inspectorr#   user_tableser   r   r    get_available_tables   s"   
r2   z/table/{table_name}   2   
table_namepagelimitc              
      sR  zt |j}| }| |vrttjd|  dd|| }dd |D }td|  }	||		 }
|
r:|
d nd}|d | }td	|  d
| d| }||}g }|D ]}i }t
|D ]
\}}|||| < q`|| qX| ||||||| d | ddW S  ty     ty } ztd|  d|  ttjddd}~ww )z-Get data from specific table with pagination.Table '' not foundr%   c                 S   s   g | ]}|d  qS )namer   )r   colr   r   r    r!   G   s    z"get_table_data.<locals>.<listcomp>SELECT COUNT(*) as total FROM r   r3   zSELECT * FROM z LIMIT z OFFSET )r6   r7   r$   pages)r5   columnsdata
paginationu"   ❌ Error getting table data for '': zError retrieving table dataN)r   r(   r)   r   r   HTTP_404_NOT_FOUNDget_columnsr   executefetchone	enumerateappendr+   r,   r-   r.   )r5   r6   r7   r   r   r/   r#   r>   column_namescount_querytotal_resultr$   offsetqueryresultrowsrowrow_dictivaluer1   r   r   r    get_table_data1   sT   	



rS   z/table/{table_name}/refreshc              
      s   z/t |j}| }| |vrttjd|  ddtd|  d|j  t	d|  dddW S  ty8     t
yU } ztd	|  d
|  ttjddd}~ww )z*Refresh table data (reload from database).r8   r9   r%   u   🔄 Table 'z' refreshed by admin z' refreshed successfullyT)messagesuccessu   ❌ Error refreshing table 'rA   zError refreshing table dataN)r   r(   r)   r   r   rB   r,   infoemailr   r+   r-   r.   )r5   r   r   r/   r#   r1   r   r   r    refresh_table_dataq   s0   


rX   z/statsc           
         s  zet |j}| }ddg  fdd|D }i }|D ]=}ztd| }|| }|r3|d nd||< W q tyY }	 ztd| d|	  d||< W Y d	}	~	qd	}	~	ww t	||t
| d
W S  ty }	 ztd|	  ttjddd	}	~	ww )zGet database statistics.r   r   c                    r   r   r   r   r   r   r    r!      r"   z&get_database_stats.<locals>.<listcomp>r<   r   zCould not get count for table z: N)total_tablestable_countstotal_recordsu"   ❌ Error getting database stats: z$Error retrieving database statisticsr%   )r   r(   r)   r   rD   rE   r+   r,   warningr*   sumvaluesr-   r   r   r.   )
r   r   r/   r#   r0   statsr   rI   rM   r1   r   r   r    get_database_stats   s:   

r`   )%__doc__loggingtypingr   r   r   r   
sqlalchemyr   r   sqlalchemy.ormr   fastapir	   r
   r   r   databaser   dependenciesr   modelsr   schemasr   	getLogger__name__r,   routergetstrr2   intrS   postrX   r`   r   r   r   r    <module>   s|    


?%
