o
    z­jþ  ã                   @   s  d dl mZmZmZ d dlmZ d dlmZmZ d dl	m
Z
mZmZmZ d dlZd dlmZ d dlmZmZmZmZ eƒ ZG dd	„ d	eƒZejd
dd�ddee dee fdd„ƒZejddd�dd„ ƒZejddd�defdd„ƒZejddd�defdd„ƒZdS )é    )Ú	APIRouterÚHTTPExceptionÚDepends)Úget_market_summary_ai)Úget_all_pricesÚget_scraper)Ú	AgentTypeÚMessageÚcoordinatorÚcontext_protocolN)Ú	BaseModel)ÚOptionalÚListÚDictÚAnyc                   @   sN   e Zd ZU eed< eed< eed< eed< dZee ed< dZee ed< dS )	ÚMarketListingÚcropÚquantityÚprice_expectedÚcontactÚBaramatiÚlocationNÚnotes)	Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úintr   r   r   © r   r   ú;/var/www/html/CropPilot/backend/app/api/endpoints/market.pyr      s   
 r   z/priceséÈ   )Ústatus_coder   r   c              
   Ã   sÔ   �zMt t ¡ ƒ}t |d| |pddœ¡ t ttj	tj
| |pdddœdd|id�¡I d	H }|r4d
|jv rE|r=|j d
d¡nd}td|d�‚d|j dg ¡iW S  tyi } ztd|› �ƒ tdt |ƒd�‚d	}~ww )zLReturns market prices from scraped sources for crops in specified locations.Úmarket_pricesr   )Úrequest_typer   r   T)r   r   Úforce_refreshÚ
get_pricesÚ
session_id©ÚsenderÚreceiverÚcontentÚmessage_typeÚcontextNÚerrorzUnknown error fetching pricesúNo response from market agentéô  ©r"   ÚdetailÚmarket_dataÚpriceszError fetching market prices: ©r   ÚuuidÚuuid4r   Úset_contextr
   Úroute_messager	   r   ÚCOORDINATORÚMARKET_ANALYZERr+   Úgetr   Ú	ExceptionÚprint)r   r   r'   Úmessager.   Úer   r   r    Úget_market_prices   s:   €ýý÷
ÿ€þrA   z/summaryc               
   Ã   sÆ   �zCt t ¡ ƒ} t | ddi¡ t ttj	tj
i dd| id�¡I dH }|r*d|jv r;|r3|j dd¡nd	}td
|d�‚d|j dd¡iW S  tyb } ztd|› �ƒ td
dt |ƒ› �d�‚d}~ww )zMGenerates a brief AI summary of current market data using multi-agent system.r$   Úmarket_summaryÚget_summaryr'   r(   Nr.   z Unknown error generating summaryr/   r0   r1   ÚsummaryzNo market summary availablezError getting market summary: z#Could not generate market summary: r5   )r'   r?   r.   r@   r   r   r    Úget_market_summary;   s,   €û
ÿ
€þrE   z	/listingséÉ   Úlistingc              
   Ã   s    �z3t t ¡ ƒdd… }t t ¡ ƒ}|  ¡ }||d< d|d< t d|› �|¡ td|› �ƒ d||d	œW S  tyO } ztd
|› �ƒ tdt |ƒd�‚d}~ww )z9Allows farmers to create market listings for their crops.Né   ÚidzUser ListingÚtypeÚlisting_zReceived listing: zListing created successfully)r?   Ú
listing_idÚdetailszError creating market listing: r0   r1   )	r   r6   r7   Údictr   r8   r>   r=   r   )rG   Únew_idr'   Úlisting_dictr@   r   r   r    Úadd_market_listingX   s$   €ý€þrQ   z/trends/{crop}c              
   Ã   sÒ   �zLt t ¡ ƒ}t |d| dœ¡ t ttj	tj
d| idd|id�¡I dH }|r-d|jv r>|r6|j dd	¡nd
}td|d�‚|j dd¡|j dg ¡dœW S  tyh } ztd|› �ƒ tdt |ƒd�‚d}~ww )z*Analyze market trends for a specific crop.Úmarket_trends)r$   r   r   Úanalyze_trendsr'   r(   Nr.   zUnknown error analyzing trendsr/   r0   r1   r?   zNo trend data availableÚhistorical_data)r?   rT   zError analyzing market trends: r5   )r   r'   r?   r.   r@   r   r   r    Úget_market_trendsx   s0   €û
ÿ
þ€þrU   )NN)Úfastapir   r   r   Úapp.core.ai_servicesr   Úapp.services.market_scraperr   r   Úapp.core.multi_agentr   r	   r
   r   r6   Úpydanticr   Útypingr   r   r   r   Úrouterr   r<   r   rA   rE   ÚpostrQ   rU   r   r   r   r    Ú<module>   s"    &
