o
    ̿Si                     @   sp  d Z ddlmZmZmZmZ ddlmZ ddlZddl	m	Z	 ddl
mZ ddlmZ ddlmZmZmZ d	d
lmZmZ e ZeeZejddddd ZejdddeefddZejdddedddedddeejfdedefddZedeejfd d!Z ejd"d#dedd$deejfd%efd&d'Z!ej"d(d)deejeefd*d+Z#dS ),z`Setup + movers + instruments routes for platform teGPT.

NOTE: Move-only split from `teGPT.py`.
    )	APIRouterDependsHTTPExceptionQuery)ListN)datetime)database)get_current_userdetails)get_zerodha_client_servicerefresh_instruments_servicevalidate_openai_setup   )_get_symbols_from_live_movers_normalize_mover_paramz/healthz,Health check and OpenAI configuration status)summaryc                     s   t  } dd| d | d dS )z,Check system health and OpenAI configurationokzChatGPT Trading Engine
configuredmessage)statusserviceopenai_configuredopenai_message)r   )openai_status r   A/var/www/html/Trade-python/app/v1/routers/platform/teGPT_setup.pyhealth_check   s   r   z/configzGet current configurationc                    s"   t | ddddddddS )z Get current system configuration_idzgpt-4o-miniT)bulk_analysisinteractive_chatorder_placementreal_time_data)user_idmodelfeatures)strget)current_userr   r   r   
get_config&   s   r'   z/moverszGet market top gainers/losersgainerszType: gainers, losers, or both)description2   zMaximum number of symbolstypelimitc              
      s   z0t | }g }|dkrt|d|t|d| }|d| }nt|||}d| |dt ddW S  tyJ } ztd	 td
t|dd}~ww )zDB-only movers endpoint.

    IMPORTANT: This endpoint must NOT trigger ET scraping, Zerodha calls, or GPT.
    Background workers populate `live_movers` and `stocks`.
    BOTHGAINERLOSERNsuccessdb)r+   symbolssource	timestamp)r   datazFailed to get DB movers  status_codedetail	r   r   r   utcnow	Exceptionlogger	exceptionr   r$   )r+   r,   r1   
mover_typer2   er   r   r   get_market_movers7   s(   	
rA   z/movers/live-modelc                 C   s   t | d i }dd |D }g }|r#t | d ddt |ii}i }|D ]}| d jd|idgd	}|r;|||< q'|||d
S )zMReturn current STOCK + live_movers + latest analysis for debugging (DB-only).live_moversc                 S   s    h | ]}| d r| d qS )stock_id)r%   ).0docr   r   r   	<setcomp>_   s     z'get_live_model_state.<locals>.<setcomp>stocksrC   z$instock_analysis_snapshots)r4   )sort)rB   rG   latest_analysis)listfindfind_one)r1   live	stock_idsrG   rK   sidsnapr   r   r   get_live_model_stateZ   s"   
rS   z/movers/top10z1Get top 10 market movers (frontend compatibility)zgainers or losersmoverc              
      s   z)t | }|dkrt|ddt|dd dd }nt||d}d|dt dW S  tyC } ztd	 td
t|dd}~ww )z0DB-only top10 movers endpoint used by Stream UI.r-   r.   
   r/   Nr   r1   )r   top10r3   r4   zFailed to get top10 moversr6   r7   r:   )rT   r1   r?   r2   r@   r   r   r   get_top10_moverss   s    "
rW   z/instruments/refreshz$Refresh instrument data from Zerodhac              
      s`   zt | |}t| |}d|d |d dW S  ty/ } ztd tdt|dd}~ww )	z+Refresh instrument master data from Zerodhar0   countr4   )r   updatedr4   zFailed to refresh instrumentsr6   r7   N)r
   r   r<   r=   r>   r   r$   )r1   r&   zerodha_clientresultr@   r   r   r   refresh_instruments   s   


r\   )$__doc__fastapir   r   r   r   typingr   loggingr   app.dbr   app.v1.dependencies.authr	   app.v1.services.teGPTr
   r   r   teGPT_helpersr   r   router	getLogger__name__r=   r%   r   r'   get_mongo_dbr$   intrA   rS   rW   postr\   r   r   r   r   <module>   sH    




"
