o
    z­j<  ã                   @   st  d dl Zd dlmZmZmZmZ d dlZd dlZd dl	Z	d dl
m
Z
mZ d dlmZ d dlmZ eƒ Ze	 deedƒr>ejnd¡Ze	 deedƒrLejnd¡Zi dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d“d$d“d%d&“dd'd(d)d*d+d,œ¥Zd-d.d/d0œZd-d1d.d2d3d4d.d/d5d.d5d1d6œZd7d8d9œd:d8d9œd;d<d9œd=d>d9œd?d@d9œdAdBd9œdCdDd9œdEdFd9œdGdHd9œdIdJd9œdKdLd9œdMdNd9œd6œZg dO¢g dP¢g dQ¢g dR¢g dS¢g dT¢g dU¢dVœZg dW¢ZdXdYdZd[d\d]d^œZd_ed`ee fdadb„Zdcedded`ee fdedf„Zdcedded`efdgdh„Z died`ee fdjdk„Z!dled`eeeee f fdmdn„Z"dS )oé    N)ÚDictÚListÚTupleÚOptional)ÚdatetimeÚ	timedelta)Ú
YieldInput)Úget_settingsÚGOOGLE_MAPS_API_KEYÚOPENWEATHER_API_KEYÚRiceg      @ÚJowargffffff@ÚBajrag      @ÚMaizegÍÌÌÌÌÌ@ÚRagigÍÌÌÌÌÌ @ÚWheatg      @ÚGramgÍÌÌÌÌÌü?ÚTurg      ø?zOther Pulsesgš™™™™™ù?Ú	Groundnutg       @Ú	SunflowerÚSoyabeangš™™™™™@Ú	Safflowerç333333ó?Ú	Nigerseedçš™™™™™é?zOther OilseedsÚCottonÚ	Sugarcaneg     ÀR@g      6@g      9@g      4@g      2@g      @)ÚTobaccoÚPotatoÚOnionzOther VegetablesÚFruitszTotal Foodgrainsç      ð?çš™™™™™ñ?çÍÌÌÌÌÌì?)ÚKharifÚRabiÚSummergÍÌÌÌÌÌð?çffffffî?gÍÌÌÌÌÌô?ç      ô?çffffffò?)ÚMaharashtraÚ	KarnatakaÚGujaratzMadhya PradeshÚPunjabÚHaryanazUttar PradeshÚBiharzWest Bengalz
Tamil NaduzAndhra PradeshÚ	TelanganaçªñÒMbÀ3@çR' ‰°íR@©ÚlatÚlong¦
F%u¢.@g§yÇ):B6@gðHPÌQ@ga2U0*y7@gà-� |S@gÙ=yX¨%?@gKY†8ÖÕR@g;M„=@gh"lxzS@gð…ÉTÁØ:@gjÞqŠŽ<T@gF%uš9@g+•Ô	TU@g[±¿ìžü6@g…ëQ¸öU@g©¤N@A&@gƒ/L¦
ªS@gl	ù gÓ/@g�Âõ(\ïS@g?Æ2@g46<ÁS@)z)Maintain proper water levels in the fieldz(Apply nitrogen fertilizer in split dosesz3Monitor for pests like stem borers and leaf foldersz4Ensure proper drainage during heavy rainfall periods)zREnsure timely irrigation, especially at crown root initiation and flowering stagesz4Apply balanced fertilizers with emphasis on nitrogenz*Watch for rust and powdery mildew diseasesz0Maintain optimal plant spacing for better yields)zAEnsure adequate soil moisture during tasseling and silking stagesz4Apply nitrogen in split doses for better utilizationz(Monitor for fall armyworm and stem borerz3Maintain proper plant population for optimal yields)z2Implement integrated pest management for bollwormszBMaintain optimal soil moisture during flowering and boll formationz-Consider foliar application of micronutrientsz&Monitor for pink bollworm and whitefly)z@Ensure proper irrigation scheduling throughout the growth periodz5Apply balanced fertilizers based on soil test resultsz+Monitor for early shoot borer and top borerz0Maintain proper row spacing and planting density)z4Ensure adequate soil moisture during tuber formationz?Monitor for late blight disease, especially in humid conditionsz,Apply potassium for better tuber developmentz5Practice proper hilling to prevent greening of tubers)z6Maintain consistent soil moisture for bulb developmentzAApply sulfur-containing fertilizers for better flavor and storagez,Monitor for thrips and purple blotch diseasez#Ensure proper curing before storage)r   r   r   r   r   r   r   )zMonitor soil moisture regularlyz,Apply fertilizers based on soil test resultsz.Implement integrated pest management practicesz7Consider weather forecasts for planning farm operationsz2Consider drainage measures to prevent waterloggingz4Implement water conservation techniques and mulchingzDIncrease irrigation frequency and consider shade for sensitive cropsz-Protect crops from frost with covers or smokez5Monitor for fungal diseases and ensure proper spacingz<Increase irrigation and consider mulching to retain moisture)Ú
heavy_rainÚdroughtÚ	high_tempÚlow_tempÚhigh_humidityÚlow_humidityÚaddressÚreturnc              
   C   s´   t stdƒ dS z7d| › dt › �}t |¡}| ¡ }|d dkr4|d d d	 d
 }|d |d dœW S td|d › �ƒ W dS  tyY } ztd|› �ƒ W Y d}~dS d}~ww )zT
    Get latitude and longitude from an address using Google Maps Geocoding API
    z7Google Maps API key not configured. Skipping geocoding.Nz:https://maps.googleapis.com/maps/api/geocode/json?address=z&key=ÚstatusÚOKÚresultsr   ÚgeometryÚlocationr4   Úlngr3   zGeocoding error: zError in geocoding: )r
   ÚprintÚrequestsÚgetÚjsonÚ	Exception)r<   ÚurlÚresponseÚdatarB   Úe© rM   úH/var/www/html/CropPilot/backend/app/services/yield_prediction_service.pyÚget_geocode_data”   s&   
þ€þrO   r4   r5   c              
   C   s^  t stdƒ dS zŒd| › d|› dt › �}t |¡}| ¡ }d| › d|› dt › �}t |¡}| ¡ }|jdkr†|jdkr†d}d}	|d	 D ]}
d
|
v r[d|
d
 v r[||
d
 d 7 }|	d7 }	qC|	dkrh|d d d nd}|d d }|d d }|d d d }||||dœW S td|j› d|j› �ƒ W dS  ty® } ztd|› �ƒ W Y d}~dS d}~ww )z/
    Get weather data from OpenWeather API
    z:OpenWeather API key not configured. Skipping weather data.Nz4https://api.openweathermap.org/data/2.5/weather?lat=z&lon=z&units=metric&appid=z5https://api.openweathermap.org/data/2.5/forecast?lat=éÈ   r   ÚlistÚrainÚ3hé   é   é   é
   ÚmainÚtempÚhumidityÚweather)Úcurrent_tempÚcurrent_humidityÚcurrent_conditionsÚmonthly_rainfall_estimatezWeather API error: ú, zError in weather data: )r   rD   rE   rF   rG   Ústatus_coderH   )r4   r5   Úcurrent_urlÚcurrent_responseÚcurrent_dataÚforecast_urlÚforecast_responseÚforecast_dataÚ
total_rainÚ	rain_daysÚitemr_   r\   r]   r^   rL   rM   rM   rN   Úget_weather_data®   sD   

€ü€þrk   c              	   C   sP   t t dd¡dƒt t dd¡ƒt t dd¡ƒt t dd	¡ƒt t d
d¡dƒdœS )z’
    Get soil data based on location
    Note: This is a placeholder. In a real implementation, this would connect to a soil database or API.
    g      @g      @rT   éx   é    é(   é<   é´   éÜ   gš™™™™™Ù?r   )ÚphÚnÚpÚkÚorganic_carbon)ÚroundÚrandomÚuniformr3   rM   rM   rN   Úget_soil_dataá   s   ûrz   Úweather_datac                 C   s´   g }| s|S | d dkr|  td ¡ n| d dk r!|  td ¡ | d dkr/|  td ¡ n| d d	k r<|  td
 ¡ | d dkrK|  td ¡ |S | d dk rX|  td ¡ |S )zO
    Generate weather-specific recommendations based on current conditions
    r\   é#   r8   rW   r9   r]   éP   r:   rV   r;   r_   é   r6   rU   r7   )ÚappendÚWEATHER_RECOMMENDATIONS)r{   ÚrecommendationsrM   rM   rN   Ú!get_weather_based_recommendationsï   s"   ýr‚   Ú
input_datac                 C   sP  t  | jdddœ¡}t| dƒr$| jr$| j› d| j› d�}t|ƒ}|r$|}t|d |d ƒ}| j}|s=t| d	ƒr=| jr=| j}t	 |d
¡}t
 | jd¡}t | jd¡}dt| jd ƒd  }	tdtd|	ƒƒ}	td| jd ƒ}
td| jd ƒ}td| jd ƒ}td| jd ƒ}| j}|rÎ|d dkrÎt ¡ j}| jdkr¤d|  kr£dksÂn | jdkr±|dksÂ|dksÂ| jdkrÎd|  krÀdkrÎn n|d |d d d   }dt|d! ƒd"  }tdtd|ƒƒ}td#d| jd$  ƒ}tdd%| jd  ƒ}d}|�rT|d& }|d'v �r)|d(k �r|d9 }nHd)|  k�rd*k�rn n|d9 }n5|d+k�r(|d%9 }n+|d,v �rT|d-k �r8|d.9 }nd(|  k�rDd)k�rKn n|d9 }n	|dk�rT|d9 }|| |	 |
| | d  | | | | | }d/t ¡ d  }|| | }|| j }t |t¡ ¡ }|�r–t |ƒ}|�r–| !|¡ t"|ƒd0k�r£|d1d0… }|||fS )2z{
    Predict crop yield based on input parameters.
    Returns: (yield_per_hectare, total_production, recommendations)
    r1   r2   r3   Úregionr`   z, Indiar4   r5   Ú	crop_typeg      @r!   gÍÌÌÌÌÌ@gš™™™™™¹?gffffffæ?r"   r   é–   r)   ro   rl   r   r_   r   r$   é   rW   r%   é   é   r&   rV   g333333Ó?i„  iÜ  r(   rP   r#   r\   )r   r   r   r   é   r~   r|   rn   )r   r   rU   g333333ë?r'   é   N)#ÚSTATE_COORDINATESrF   ÚstateÚhasattrr„   rO   rk   Úcropr…   ÚCROP_COEFFICIENTSÚSEASON_COEFFICIENTSÚseasonÚSTATE_COEFFICIENTSÚabsrr   ÚmaxÚminrs   rt   ru   rv   Úannual_rainfallr   ÚnowÚmonthÚ
fertilizerÚ	pesticiderx   ÚareaÚCROP_RECOMMENDATIONSÚDEFAULT_RECOMMENDATIONSÚcopyr‚   ÚextendÚlen)rƒ   Úlocation_coordsÚlocation_stringÚgeocode_datar{   r�   Ú
base_yieldÚseason_multiplierÚstate_multiplierÚ	ph_effectÚn_effectÚp_effectÚk_effectÚ	oc_effectÚrainfallÚcurrent_monthÚrainfall_effectÚfertilizer_effectÚpesticide_effectÚweather_effectrY   Úcombined_effectÚrandom_factorÚyield_per_hectareÚtotal_productionr�   Úweather_recsrM   rM   rN   Úpredict_yield  sš   
 "




€




ÿþýüûúùøÿ


r¸   )#ÚnumpyÚnpÚtypingr   r   r   r   rx   rE   Úosr   r   Úapp.models.yield_modelr   Úapp.core.configr	   ÚsettingsÚgetenvrŽ   r
   r   r�   r‘   r“   rŒ   r�   rž   r€   ÚstrrO   Úfloatrk   rz   r‚   r¸   rM   rM   rM   rN   Ú<module>   sÐ    ÿþýüûúùø	÷
öõôóòñðïéýôôÛ.	ú	3$