
    !+i#                        d Z ddlmZmZ ddlmZmZmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlmZmZmZ  ej$                  dd	g
      d        Z ej$                  dd	g
      d        Z ej$                  dd	g
      d        Z ej$                  dd	g
      d        Z ej$                  ddg
      d        Z ej$                  ddg
      d        Zy)z4
Endpoints Flask para Intelligence de Concorrentes.
    )jsonifyrequest)and_descfunc)datetime	timedelta)api_bp)SessionLocal)CompetitorMetricsHistoryCompetitorImpactEventCompetitorThreatScorez8/competitor-intelligence/ads/<ad_id>/competitors/metricsGET)methodsc                 p   t               }	 t        j                  j                  ddt              }t        j                  j                  d      }t        j                         t        |      z
  }|j                  t              j                  t        t        j                  | k(  t        j                  |k\              }|r"|j                  t        j                  |k(        }|j                  t!        t        j                              j#                  d      j%                         }i }|D ]  }|j                  }	|	|vrg ||	<   ||	   j'                  |j                  j)                         |j*                  rt-        |j*                        nd|j.                  |j0                  |j2                  rt-        |j2                        nd|j4                  |j6                  |j8                  |j:                  |j<                  d
        t?        |      |jA                          S # |jA                          w xY w)	u:   
    Retorna histórico de métricas de concorrentes.
    hours   typecompetitor_id)r   i  N)
	timestamppricevisitssalesconversion_ratehas_free_shippinghas_promotionstock_availableseller_reputationreviews_count)!r   r   argsgetintr   utcnowr	   queryr   filterr   	our_ad_idr   r   order_byr   limitallappend	isoformatr   floatr   r   r   r   r   r   r   r    r   close)
ad_iddbr   r   sincer%   metricsresultmetriccomp_ids
             W/var/www/hypershopcomercio.com.br/hyper-ai/app/api/endpoints/competitor_intelligence.pyget_competitor_metrics_historyr7      s   
 
B(  #C 8((9!IE$::1299(22e;(22e;
 LL!9!G!G=!XYE..&>&H&H!IJPPQUVZZ\  	F**Gf$"$w7O""#--77906v||,$ --DJDZDZ5)?)?#@`d%+%=%=!'!5!5#)#9#9%+%=%=!'!5!5$ 	$ v


s   HH# #H5z>/competitor-intelligence/ads/<ad_id>/competitors/impact-eventsc                    t               }	 t        j                  j                  d      }t        j                  j                  ddt              }|j                  t              j                  t        j                  | k(        }|r"|j                  t        j                  |k(        }|j                  t        t        j                              j                  |      j                         }t        |D cg c]  }|j                   |j                  |j"                  |j                  j%                         |j&                  rt)        |j&                        nd|j*                  |j,                  rt)        |j,                        nd|j.                  |j0                  |j2                  |j4                  |j6                  d c}      |j9                          S c c}w # |j9                          w xY w)z1
    Retorna eventos de impacto competitivo.
    r   r)   2   r   N)idr   
event_typeevent_timestampchange_percentageestimated_sales_lostcorrelation_scoreconfidence_levelthreat_score	diagnosisrecommendationaction_taken)r   r   r!   r"   r#   r%   r   r&   r'   r   r(   r   r<   r)   r*   r   r:   r;   r,   r=   r-   r>   r?   r@   rA   rB   rC   rD   r.   )r/   r0   r   r)   r%   eventses          r6   get_impact_eventsrG   A   s   
 
B((9  "3 7./66!++u4
 LL!6!D!D!UVE%:%J%J KLRRSXY]]_   $$__,, 00::<?@?R?Rq':':!;X\$%$:$:?@?R?Rq':':!;X\ ! 2 2NN..NN
   	
 	
s   C,G 8C
GG G G0z>/competitor-intelligence/ads/<ad_id>/competitors/threat-scoresc                 n   t               }	 |j                  t        j                  t	        j
                  t        j                        j                  d            j                  t        j                  | k(        j                  t        j                        j                         }|j                  t              j                  |t        t        j                  |j                  j                  k(  t        j                  |j                  j                  k(              j!                         }t#        |D cg c]J  }|j                  |j$                  |j&                  |j(                  |j                  j+                         dL c}      |j-                          S c c}w # |j-                          w xY w)uE   
    Retorna scores de ameaça dos concorrentes (mais recentes).
    max_date)r   total_threat_scorethreat_levelsummarycalculated_at)r   r%   r   r   r   maxrM   labelr&   r'   group_bysubqueryjoinr   crI   r*   r   rJ   rK   rL   r,   r.   )r/   r0   rQ   scoresss        r6   get_threat_scoresrV   f   sM   
 
B88!//HH*889??
K
 &!++u4

((66
7
 	 /055%33xzz7O7OO%33xzz7J7JJ
 #% 	    __"#"6"6NNyy__668
   	
 	
s   D+F" 7AFF" F" "F4zI/competitor-intelligence/ads/<ad_id>/competitors/<competitor_id>/timelinec                 ,   t               }	 t        j                  j                  ddt              }t        j                         t        |      z
  }|j                  t              j                  t        t        j                  |k(  t        j                  | k(  t        j                  |k\              j                  t        j                        j!                         }|j                  t"              j                  t        t"        j                  |k(  t"        j                  | k(  t"        j$                  |k\              j                  t"        j$                        j!                         }t'        ||j)                         t        j                         j)                         |D cg c]  }|j                  j)                         |j*                  rt-        |j*                        nd|j.                  |j0                  |j2                  rt-        |j2                        nd|j4                  rt-        |j4                        nd|j6                  |j8                  |j:                  rt-        |j:                        ndd	 c}|D cg c]U  }|j$                  j)                         |j<                  |j>                  |j@                  |jB                  |jD                  dW c}d      |jG                          S c c}w c c}w # |jG                          w xY w)	uK   
    Retorna timeline completa de um concorrente: métricas + eventos.
    days   r   )rX   N)	r   competitor_pricecompetitor_salescompetitor_visitscompetitor_conversion	our_price	our_sales
our_visitsour_conversion)r   r   rB   rC   rA   r>   )r   period_start
period_endr2   rE   )$r   r   r!   r"   r#   r   r$   r	   r%   r   r&   r   r   r'   r   r(   r*   r   r<   r   r,   r   r-   r   r   r   r^   r_   r`   our_conversion_rater;   rB   rC   rA   r>   r.   )	r/   r   r0   rX   r1   r2   rE   mrF   s	            r6   get_competitor_timelinerf      s\   
 
B5||5!I4$88 ((34;;(66-G(22e;(22e;
 (+55
6ssu 	 /077%33}D%//58%55>
 ((88
9##% 	 *!OO-"//+557 !  "#!6!6!8:;''aggt())*IJIZIZU13D3D-E`d78{{q{{!3!""#,,FGF[F[eA,A,A&Bae
.  
  "#!2!2!<!<!>LL!"&'&6&6$%NN,-,B,B
%
 > 	
7
 	
s,   FL 'CK7>L AK<L 7
L LzM/competitor-intelligence/ads/<ad_id>/competitors/<competitor_id>/force-updatePOSTc                    t               }	 ddlm}  ||      }|j                  ||       }|rt	        ddd      |j                          S t	        ddd      df|j                          S # |j                          w xY w)	uH   
    Força atualização imediata das métricas de um concorrente.
    r   )CompetitorMetricsScrapersuccessu   Métricas atualizadasstatusmessageerroru   Falha ao atualizar métricasi  )r   'app.services.competitor_metrics_scraperri   collect_and_save_metricsr   r.   )r/   r   r0   ri   scraperrj   s         r6   force_competitor_updaterr      st    
 
BT*2.22=%Hi<STU 	
 g:XYZ\__


s   /A, A, ,A>zM/competitor-intelligence/ads/<ad_id>/impact-events/<int:event_id>/mark-actionc                 >   t               }	 t        j                         }|j                  dd      }|j	                  t
              j                  t        t
        j                  |k(  t
        j                  | k(              j                         }|st        ddi      df|j                          S d|_        ||_        t        j                          |_        |j%                          t        dd| d	d
      |j                          S # |j                          w xY w)uB   
    Marca que uma ação foi tomada em resposta a um evento.
    action_typeignorern   u   Evento não encontradoi  Trj   u   Ação 'z' registradark   )r   r   get_jsonr"   r%   r   r&   r   r:   r'   firstr   r.   rD   rt   r   r$   action_timestampcommit)r/   event_idr0   datart   events         r6   mark_event_action_takenr}      s    
 
B!hh}h7./66%((H4%//58

 %' 	 G%=>?D 	
 "'!)!2
		)(;-|8\]^


s   BD
 1AD
 
DN)__doc__flaskr   r   
sqlalchemyr   r   r   r   r	   app.apir
   app.core.databaser   "app.models.competitor_intelligencer   r   r   router7   rG   rV   rf   rr   r}        r6   <module>r      s   # ' ' (  *  HSXRYZ- [-` NY^X_`! a!H NY^X_` aB Ydicjk: l:z ]hngop q& ]hngop qr   