
    !+i                         d dl Z d dlZ ej                  ej                          ej                  e      Z G d d      Zy)    N)levelc            	       V    e Zd Zd Zd ZdefdZdefdZdde	d	ed
ede
fdZde	fdZy)AdQualityServicec                      y )N )selfs    M/var/www/hypershopcomercio.com.br/hyper-ai/app/services/ad_quality_service.py__init__zAdQualityService.__init__   s        c                     |d d S )N   r   )r   issuess     r	   minimize_issuesz AdQualityService.minimize_issues   s    bqzr   ad_datac           	         	 | j                  |j                  dd            }| j                  |j                  dg       |j                  d      |j                  d      |j                  dd            }| j                  |j                  dg             }|d	   |d	   z   |d	   z   }d
}|dk\  rd}n|dk\  rd}t	        |      ||||ddS # t
        $ r!}t        j                  d| d       |d}~ww xY w)zJ
        Analyzes Ad data using Strict SOP Rules (Training Mode).
        title picturesvideo_idshort_descriptionmanual_video_verifiedF
attributesscoreu   CríticoP   	Excelente2   Regular)r   mediar   )r   labelsectionsz#Error in AdQualityService.analyze: T)exc_infoN)_analyze_titleget_analyze_media_analyze_attributesint	Exceptionloggererror)r   r   
title_data
media_data	attr_datafinal_scorehealth_labeles           r	   analyzezAdQualityService.analyze   s   	,,W[["-EFJ,,J+J'/03U;	J 00\21NOI$W-
70CCiPWFXXK%Lb *"( [)%''"+   	LL>qcBTLRG	s   CC 	C5C00C5r   c                 N   g }d}|sd}t        |      }g d}|D cg c]  }d| dd|j                          dv s|! }}t        |      dk(  }|j                  d|rdj                  |      nd d	||rd
ndd
d       d|cxk  xr dk  nc }	|j                  d|	|	rd
nd|cxk  rdk  rn ndndd
d       |j	                         xr |d
kD  }
|j                  d|
 |
sd
ndd
d       t        d |D              }||||D cg c]  }|d   r	|d    c}dS c c}w c c}w )N   r   )
deparacomr/   dodaemnonapor r   zSem palavras de parada (z, Nenhuma)
   r   metr   	max_scorer   <   u+   Uso eficiente do espaço (50-60 caracteres)(      zCaixa Alta controladac              3   &   K   | ]	  }|d      ywr   Nr   .0cs     r	   	<genexpr>z2AdQualityService._analyze_title.<locals>.<genexpr>^        7!G*7   rA   r   r   rB   criteriar   )lenlowerappendjoinisuppersum)r   r   rO   
max_pointslength
stop_wordswordfound_stopsc1_metc2_metis_all_capstotal_scorerJ   s                r	   r"   zAdQualityService._analyze_title6   s~   
EU U
(2Z$qkqWXEY6YtZZ[!Q&/+		+0F[d/eefg!Rq	
 	 v##B!RR6->B->A	
 	 mmo5&2+,"?*R	
 	 7h77$:8t|  `Nop  EF  GL  EM`abi`j  `N  O  	O= [< `Ns   DD
D"
D"
Nr   r   r   r   c           	      V   g }d}t        |xs g       }g d}t        |      D ]1  \  }	\  }
}|	dz   }||k\  }|j                  |
||r|nd||sdnd d       3 t        |      xs t        |      xs |}|j                  d||rdndd|sd	nd d       t	        d
 |D              }|||g dS )N-   )	)z2Foto 1: Capa (Fundo Branco + Produto Centralizado)   )z,Foto 2: Ambientada (Produto em uso/contexto)r   )u*   Foto 3: Quebra de Objeção (Detalhe/Zoom)r   )u7   Foto 4: Detalhe Técnico (Foco em acabamento/conexões)r   )u(   Foto 5: Benefício Principal (Lifestyle)r   )u6   Foto 6: Dimensões/Escala (Com referência de tamanho)r   )z/Foto 7: Embalagem/Unboxing (O que vai na caixa)r   )u3   Foto 8: Prova Social ou Variante (Aplicação real)r   )z+Foto 9: Diferencial Competitivo ou Garantiar      r   z.Adicione foto neste slot para completar o SOP.)r   rA   r   rB   hintu)   Vídeo ou Clips Vinculado (Manual aceito)   uF   Adicione um vídeo no YouTube ou confirme manualmente se houver Clips.c              3   &   K   | ]	  }|d      ywrG   r   rH   s     r	   rK   z2AdQualityService._analyze_media.<locals>.<genexpr>   rL   rM   rN   )rP   	enumeraterR   boolrU   )r   r   r   r   r   rO   rV   qty	sop_slotsidxr   pointsslot_num	is_filled	has_videor^   s                   r	   r$   zAdQualityService._analyze_mediaa   s    
(.b!

	 %.i$8 
	 C%QwHxIOO #,!#PYH_c 	
	 NVd+<&=VAV	@$R!dm\sw
 	 7h77$:8_abbr   r   c                    g }d}|sg }|D cg c]  }|j                  d      s| }}t        |      }|dkD  rt        |      |z  nd}|j                  d|dk\  |dk\  rdn|dk\  rdnddd	       |D cg c]  }|j                  d
       }}d|v xs d|v }	|j                  d|	|	rdnddd	       t        d |D              }
|
||g dS c c}w c c}w )N   
value_namer   u   Ficha Técnica Completa (>80%)g?rd   g      ?rE   r@   idBRANDMARCAzMarca Identificadar?   c              3   &   K   | ]	  }|d      ywrG   r   rH   s     r	   rK   z7AdQualityService._analyze_attributes.<locals>.<genexpr>   rL   rM   rN   )r#   rP   rR   rU   )r   r   rO   rV   afilledtotal_countcompletenessattr_ids	has_brandr^   s              r	   r%   z$AdQualityService._analyze_attributes   s   
J'?155+>!??*o4?!Os6{[0 	53&'3.R,#:MQST	
 	 *44AAEE$K44x'>7h+>	)$R!	
 	 7h77$:8_abb/ @ 5s   CC5C)NF)__name__
__module____qualname__r
   r   dictr0   strr"   listrg   r$   r%   r   r   r	   r   r   
   s^    
!t !F)OC )OV+ct +cs +cs +crv +cZcd cr   r   )reloggingbasicConfigINFO	getLoggerr|   r(   r   r   r   r	   <module>r      sC    
    ',, '			8	$bc bcr   