
    h*                     b   d Z ddlZddlZddlZddlmZ  G d d      Zedk(  r e       Zddd	d
dZ	ej                  e	      Z eded            eded            eded           dddd
dZej                  e      Z eded            eded            eded           yy)zZ
Image selector for CleanKitchens articles
Matches violations to appropriate stock images
    N)defaultdictc                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
ImageSelectorc                     d| _         d| _        | j                         | _        t	        t
              | _        g dg dg dg dg dg dg d	g d
d| _        g dg dg dg dg dg dg dg dg dg dd
| _        y )Nz/assets/imageszc/var/www/twin-digital-media/public_html/_sites/cleankitchens/assets/images/generation_metadata.json)mcdonaldzburger kingwendyz	five guyszin-n-outzwhite castlesonic)	starbucksdunkinpeetcaribouztim hortonszcoffee bean)kfcpopeyeszchick-fil-azraising canechurch)dominoz	pizza hutz	papa johnzlittle caesarsmarco)chipotlez	taco bellqdobazmoe southwestzdel taco)subwayz
jimmy johnzjersey mike	firehousequiznos)zpanda expresszpf changzpick up stixzpei wei)applebeechilizolive gardenzred lobsteroutback)burger_chaincoffee_chainchicken_chainpizza_chainmexican_chain	sub_chainasian_chaincasual_chain)rodentmousemicerat	droppingsgnaw)roach	cockroachinsectbugpest)temperaturezcold holdingzhot holdingcoolingzdanger zone)clean
sanitationdirtysoilgreasegrime)moldmildewfungusmoisture)zcross contaminatrawcookedseparate)handwashsinksoaptowel	sanitizer)ceilingfloorwallcrackholedamage)sewagedrainbackupplumbingwaste)closedclosurez	shut downceasesuspend)
r#   r)   r.   cleanlinessr6   cross_contaminationhandwashing
structuralrI   rO   )	base_urlmetadata_pathload_metadataimage_metadatar   intusage_countschain_mappingsviolation_mappingsselfs    a/var/www/twin-digital-media/public_html/_sites/cleankitchens/production/scripts/image_selector.py__init__zImageSelector.__init__   s    ( C #002 (, sdXZ\XS[	
 NDcV<#TQQHM#
    c                     t         j                  j                  | j                        r5t	        | j                  d      5 }t        j                  |      cddd       S y# 1 sw Y   yxY w)zLoad generated image metadatarN)ospathexistsrW   openjsonload)r_   fs     r`   rX   zImageSelector.load_metadata1   sP    77>>$,,-d((#. $!yy|$ $$s    A  A)c                     |j                         }| j                  j                         D ]  \  }}|D ]  }||v s|c c S   y)z0Identify if restaurant is a chain and which typeN)lowerr\   items)r_   restaurant_name
name_lower
chain_typekeywordskeywords         r`   identify_chainzImageSelector.identify_chain8   sU    $**,
$($7$7$=$=$? 	& J# &j(%%&	&
 rb   c                    |sy|j                         }i }| j                  j                         D ],  \  }}d}|D ]  }||v s||j                  |      z  } |||<   . |r!t	        ||j
                        }||   dkD  r|S y)z)Identify primary violation type from textgeneralr   )key)rm   r]   rn   countmaxget)	r_   violations_textviolations_lowerscoresviolation_typerr   scorers   
best_matchs	            r`   identify_violation_typez%ImageSelector.identify_violation_typeC   s    *002 )-(?(?(E(E(G 	+$NHE# =..-33G<<E= &+F>"	+ V4Jj!A%!!rb   c                    g }| j                   rHd| j                   v r:| j                   d   D ](  }|d   |k(  s|d   |k(  s|j                  |d          * |svd| }t        j                  j	                  |      rRt        j
                  |      D ]:  }|j                  | d      s|j                  d      s*|j                  |       < |S )z+Get list of available images for a categoryimagescategory	subfolderfilenamezK/var/www/twin-digital-media/public_html/_sites/cleankitchens/assets/images/_z.jpg)rY   appendre   rf   rg   listdir
startswithendswith)r_   r   r   r   imgdir_pathfiles          r`   get_available_imagesz"ImageSelector.get_available_images[   s     8t/B/B#B**84 3z?h.3{3Cy3PMM#j/23
 dendopHww~~h'JJx0 ,D(1~64==;Pd+, rb   c                     |syt        d      }|d   }|D ]B  }| d| }| j                  |   }||k  r|}|}#||k(  s)t        j                         dkD  sA|}D | d| }| j                  |xx   dz  cc<   |S )z2Select the least used image from available optionsNinfr   r   g      ?   )floatr[   random)r_   r   r   	min_usage
best_imageimage	usage_keyusages           r`   select_least_used_imagez%ImageSelector.select_least_used_imageo   s     %L	AY
 		#E#*AeW-I%%i0Ey !	"
)##(="
		#  j*.	)$)$rb   c                 0   |j                  dd      }|dk(  r;| j                  dd      }|rg| j                  |d      }| j                   d| dddS |dk(  r;| j                  dd      }|r'| j                  |d      }| j                   d| d	ddS |j                  d
      r;| j                  dd      }|r'| j                  |d      }| j                   d| dddS |j                  dd      }| j	                  |      }|dk7  rP| j                  |d      }|r<| j                  ||      }d|j                  dd       }| j                   d| ||dS |j                  dd      }| j                  |      }	|	r^| j                  |	d      }|rJ| j                  ||	      }|	j                  dd      j                          d}| j                   d| ||	dS | j                  dd      }|r| j                  |d      }nd}| j                   d| dddS )a#  
        Select appropriate stock image based on inspection data
        
        Args:
            inspection_data: dict with keys:
                - facility_name: Restaurant name
                - violations: Violation text
                - is_closure: Boolean
                - article_type: 'violation', 'daily_summary', 'weekly_summary'
        
        Returns:
            dict with:
                - image_url: Full URL path to image
                - image_alt: Alt text for image
                - category: Category selected
        article_type	violationdaily_summary	summariesz/summaries/z*Daily restaurant inspection summary report)	image_url	image_altr   weekly_summaryz+Weekly restaurant inspection summary report
is_closurerO   
violationsz/violations/z&Restaurant closed by health department rv   zRestaurant health violation - r    facility_namechainsz restaurant inspectionz/chains/zgeneral_1.jpgz&Restaurant health inspection violation)rz   r   r   rV   r   replacert   title)
r_   inspection_datar   r   selectedr{   r~   alt_textro   rq   s
             r`   select_image_for_articlez&ImageSelector.select_image_for_article   s   & '**>;G?*..LF77P$(MM?+hZ!H!M /  --../?MF77@PQ$(MM?+hZ!H!N 0  |,..y,GF77	J$(MM?,xj!I!I )  *--lB?55oFY&..~|LF77O;N<R<RSVX[<\;]^$(MM?,xj!I!) .  *--orB((9
..z8DF77
K(00c:@@BCCYZ$(MM?(8*!E!) *  **9lC33FIFH 'H !MM?,xjAA!
 	
rb   c                 ,    t        | j                        S )zReturn current usage statistics)dictr[   r^   s    r`   get_usage_statszImageSelector.get_usage_stats   s    D%%&&rb   N)__name__
__module____qualname__ra   rX   rt   r   r   r   r   r    rb   r`   r   r      s-    "
H	0(4`
D'rb   r   __main__zFRANKIE'S FAST FOOD CORNERz7OBSERVED NO HAND WASHING SINK IN REAR DISH WASHING AREAFr   )r   r   r   r   z
Selected: r   z
Alt text: r   z
Category: r   z
McDonald'szRodent activity foundTz
Closure - Selected: )__doc__ri   re   r   collectionsr   r   r   selector	test_datar   resultprint
test_data2result2r   rb   r`   <module>r      s  
  	  #a' a'J zH 6O#	I ..y9F	Jvk*+
,-	Jvk*+
,-	Jvj)*
+, &-#	J //
;G	"7;#7"8
9:	Jw{+,
-.	Jwz*+
,-7 rb   