o
    i                     @   s  d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	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 d d	lZed
dgdZd dlmZ ee jjjZeeed dZdd ZedeefdefddZ e!deded	eefdededefddZ"e#deefde$defddZ%edeefdefd d!Z&e!deded	eefd"ededefd#d$Z'e#d%eefde$defd&d'Z(ejd(ed)d*efd+d,Z)ejd-ed)eefd*edefd.d/Z*ejd0ed)eefd*edefd1d2Z+ed3eefdefd4d5Z,ejd6ed)eefd*edefd7d8Z-e!d9eded	eefd:ed;edefd<d=Z.d	S )>    )	APIRouterDependsHTTPException)Session)SessionLocal)
InstrumentKPIKPIValueApiLog	AdminUser)HTMLResponse)Jinja2Templates)Request)FormNz/adminAdmin)prefixtags)Path	templates)	directoryc                  c   s(    t  } z
| V  W |   d S |   w N)r   closedb r   7/var/www/html/stock_analysis/be/app/api/admin_routes.pyget_db   s
   r   z/instrumentsr   c                 C      |  t S r   )queryr   allr   r   r   r   list_instruments      r    .symbolnamec                 C   sD   | tj| d rtdddt| |d}|| |  |S )N)r"     zInstrument already existsdetail)r"   r#   )r   r   	filter_byfirstr   addcommit)r"   r#   r   itemr   r   r   create_instrument   s   
r,   z/instruments/{id}idc                 C   :   | t| }|stddd|| |  ddiS Ni  z	Not foundr%   deletedT)r   r   getr   deleter*   r-   r   r+   r   r   r   delete_instrument%      
r4   z/kpisc                 C   r   r   )r   r   r   r   r   r   r   	list_kpis/   r!   r6   codec                 C   sL   t d |tj| d rtdddt| |d}|| |  |S )NzIN Create KPIs)r7   r$   zKPI already existsr%   )r7   r#   )printr   r   r'   r(   r   r)   r*   )r7   r#   r   r+   r   r   r   
create_kpi3   s   
r9   z
/kpis/{id}c                 C   r.   r/   )r   r   r1   r   r2   r*   r3   r   r   r   
delete_kpi=   r5   r:   /)response_classrequestc                 C   s   t dd| iS )Nz
admin.htmlr=   )r   TemplateResponse)r=   r   r   r   admin_dashboardF   s   r?   z/admin/instrumentsc                 C   4   | t }ddd |D }td| ddS )N c              	   S   .   g | ]}d |j  d|jpd d|j dqS )C<div class='flex justify-between items-center border-b py-1'><span> (rA   zC)</span><button class='text-red-600' hx-delete='/admin/instruments/zH' hx-target='#instrument-list' hx-swap='outerHTML'>Delete</button></div>)r"   r#   r-   ).0ir   r   r   
<listcomp>M       z)list_instruments_html.<locals>.<listcomp>z<div id='instrument-list'></div>content)r   r   r   joinr   )r=   r   instrumentshtmlr   r   r   list_instruments_htmlJ   
   
rO   z/admin/kpisc                 C   r@   )NrA   c              	   S   rB   )rC   rD   rA   z<)</span><button class='text-red-600' hx-delete='/admin/kpis/zA' hx-target='#kpi-list' hx-swap='outerHTML'>Delete</button></div>)r7   r#   r-   )rE   kr   r   r   rG   X   rH   z"list_kpis_html.<locals>.<listcomp>z<div id='kpi-list'>rI   rJ   )r   r   r   rL   r   )r=   r   kpisrN   r   r   r   list_kpis_htmlU   rP   rS   z	/api-logsc                 C   s(   |  ttj  }dd |D S )Nc                 S   s   g | ]}|  qS r   )as_dictrE   logr   r   r   rG   c   s    z!list_api_logs.<locals>.<listcomp>)r   r
   order_by	timestampdescr   )r   logsr   r   r   list_api_logs`   s   r[   z/admin/api-logsc                 C   sD   | ttj  }ddd |D pd}td| ddS )NrA   c                 S   s<   g | ]}d |j d d|j d|j d|jpd d	qS )zb<div class='flex justify-between items-center border-b py-1 text-xs'><div class='flex-1 truncate'>z%Y-%m-%d %H:%M:%Su    – <b>z</b> z#</div><div class='w-24 text-right'>-z</div></div>)rX   strftimemethodendpointresponse_statusrU   r   r   r   rG   h   s    
z&list_api_logs_html.<locals>.<listcomp>z)<p class='text-gray-500'>No logs yet.</p>z<div id='api-log-list'>rI   rJ   )r   r
   rW   rX   rY   r   rL   r   )r=   r   rZ   rN   r   r   r   list_api_logs_htmle   s   
ra   z/usersusernamepasswordc                 C   sn   | tj| d }|rtdddt|dt 	d}t| |ddd}|
| |  dd	d
S )N)rb   r$   zUser already exists.r%   zutf-8FT)rb   rc   is_superuser	is_activezUser created successfully)successmessage)r   r   r'   r(   r   bcrypthashpwencodegensaltdecoder)   r*   )rb   rc   r   existing_userhashed_passwordr+   r   r   r   create_userq   s   

ro   )/fastapir   r   r   sqlalchemy.ormr   app.db.databaser   app.db.modelsr   r   r	   r
   r   fastapi.responsesr   fastapi.templatingr   r   r   rh   routerpathlibr   __file__resolveparentBASE_DIRstrr   r   r1   r    postr,   r2   intr4   r6   r9   r:   r?   rO   rS   r[   ra   ro   r   r   r   r   <module>   s^    ,	,	

