o
    r›Xjb$  ã                   @  sb  U d dl mZ d dlZd dlZd dlmZmZ d dlmZmZ d dl	m
Z
 dZdZdZd	Zd
Zg dg d¢dœ‘dg d¢dœ‘dg d¢dœ‘dg d¢dœ‘dg d¢dœ‘dg d¢dœ‘dg d¢dœ‘dg d¢dœ‘dg d¢dœ‘dg d¢dœ‘d g d!¢dœ‘d"g d#¢dœ‘d$g d%¢dœ‘d&g d'¢dœ‘d(g d)¢dœ‘d*g d+¢dœ‘d,g d-¢dœ‘d.g d/¢dœ‘d0g d1¢dœ‘d2g d3¢dœ‘d4g d5¢dœ‘d6g d7¢dœ‘d8g d9¢dœ‘d:g d;¢dœ‘d<g d=¢dœ‘d>g d?¢dœ‘d@g dA¢dœ‘dBg dC¢dœ‘dDg dE¢dœ‘dFg dG¢dœ‘dHg dI¢dœ‘dJg dK¢dœ‘ZdLedM< d dNdOdPdQdRdSdTœZeG dUdV„ dVƒƒZG dWdX„ dXƒZdS )Yé    )ÚannotationsN)ÚasdictÚ	dataclass)ÚdateÚdatetime)ÚPath)Úmagazine_coverÚeditorial_overlayÚapple_keynoteÚ
pitch_deckÚ
bento_gridÚhero_bannerÚinfographicÚnews_broadcastÚtimelineÚdashboard_uiÚsplit_comparisonÚ
glass_cardÚminimal_premiumÚ	neon_techÚ	bold_statÚgradient_storyÚcorporate_linkedinÚ	cyberpunk)Úmodern_startupÚapple_minimalÚswissÚluxuryÚ	brutalistÚ	newspaperÚ
futuristicÚ	editorial)ÚglassmorphismÚgradient_meshÚ3d_environmentÚminimal_whiteÚdark_premiumÚ	tech_gridÚabstract_geometryÚneural_networkÚliquid_gradientÚauroraÚcyberpunk_cityÚpaper_textureÚnoise_textureÚmesh_gradient)Ú	cinematicÚkineticÚglitchÚparallaxÚ	broadcastÚproduct_revealÚdata_motion)
Úeditorial_3dÚapple_productÚstripe_fintechÚnvidia_computeÚopenai_researchÚfigma_uiÚlinear_saasÚarc_browserÚ
cyber_noirÚphotoreal_techÚelectric_monday)z#0A1628ú#00D4FFú#FFFFFFz#5B8CFF)ÚnameÚcolorsÚneon_tuesday)z#0D0221z#C77DFFz#FF2E97z#1A0A3EÚember_wednesday)z#0C0C0Cz#FF6B00z#D4AF37z#2A2A2AÚemerald_thursday)z#042F2Ez#10B981rC   z#14B8A6Úcrimson_friday)z#1A0505z#EF4444z#374151z#F8FAFCÚaurora_saturday)z#0F0A1Fz#A78BFAú#38BDF8z#F472B6Úminimal_sunday)z#FAF7F2z#E8E0D5z#2C2C2Cz#8B7355Ústripe_violet)z#0A2540z#635BFFrB   z#F6F9FCÚlinear_indigo)z#0D0D12z#5E6AD2rC   z#8B8BA7Úfigma_sunset)z#1E1E1Ez#A259FFz#F24E1Ez#FF7262Únvidia_green)ú#000000z#76B900rC   ú#1A1A1AÚapple_silver)z#F5F5F7z#1D1D1Fz#86868Bz#0071E3Úopenai_teal)z#0D0D0Dz#10A37FrC   rR   Ú	arc_space)z#1C1C1Ez#FF6B6Bz#4ECDC4z#FFE66DÚframer_blue)rQ   z#0099FFrC   z#333333Úgold_luxury)z#0A0A0Az#C9A227z#F5E6C8z#2D2D2DÚgraphite_orange)z#1C1917z#F97316z#FAFAF9z#44403CÚbeige_charcoal)z#F5F0E8z#2D2A26z#A89F91z#8B4513Úcyan_ice)z#F0FDFFz#0891B2z#164E63z#22D3EEÚmagenta_void)z#0B0014z#FF00AAú#7C3AEDz#E0E7FFÚforest_mist)z#052E16z#4ADE80z#ECFDF5z#166534Úocean_depth)z#020617z#0EA5E9rK   z#F0F9FFÚ
lava_night)z#18080Aú#FB7185z#FBBF24z#451A1AÚ	mint_mono)rC   z#0F766Ez#99F6E4z#134E4AÚ	paper_ink)z#FFFEF7z#111111z#DC2626z#6B7280Ú	holo_mesh)z#111827z#EC4899z#8B5CF6z#06B6D4Ú
steel_blue)z#0F172Az#64748Bz#94A3B8z#E2E8F0Úsakura_night)z#1A0A14r`   z#FCE7F3z#9D174DÚmatrix_green)z#020202z#00FF41z#003B00z#39FF14Úcopper_dark)z#1C1410z#B87333z#E8D5C4z#3D2914Ú	ice_lilac)z#F8F7FFr\   z#C4B5FDz#1E1B4BÚsunset_deck)z#1A0F0Az#FF8A00z#FF3D00z#FFF3E0z
list[dict]ÚPALETTESé   é   é   é   é   é   )r   rk   rl   rm   rn   ro   rp   c                   @  sN   e Zd ZU ded< ded< ded< ded< ded< ded< ded	< ded
< dS )ÚCreativeBriefÚstrÚlayoutÚ
typographyÚ
backgroundÚpalette_namez	list[str]ÚpaletteÚillustration_styleÚvideo_styleÚaspectN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r   r   úB/home/esfera/Documents/content_generation/src/services/creative.pyrq   �   s   
 rq   c                   @  sf   e Zd ZdZd#dd„Zd$dd	„Zd%dd„Zd&dd„Zd'dd„Zd(d)dd„Z	e
d*dd„ƒZd+d d!„Zd"S ),ÚCreativeDirectorzIAssigns unique creative directions and persists history to avoid repeats.Úhistory_pathr   c                 C  s&   || _ | j jjddd� |  ¡ | _d S )NT)ÚparentsÚexist_ok)r‚   ÚparentÚmkdirÚ_loadÚhistory)Úselfr‚   r   r   r€   Ú__init__�   s   zCreativeDirector.__init__ÚreturnÚdictc                 C  sB   | j  ¡ rzt | j jdd�¡W S  ty   Y nw g d d d dœS )Núutf-8©Úencoding)ÚpostsÚlast_paletteÚlast_layoutÚlast_date_palette)r‚   ÚexistsÚjsonÚloadsÚ	read_textÚ	Exception©r‰   r   r   r€   r‡   •   s   
ÿzCreativeDirector._loadÚNonec                 C  s    | j jtj| jdd�dd� d S )Nrl   )Úindentr�   rŽ   )r‚   Ú
write_textr•   Údumpsrˆ   r™   r   r   r€   Úsave�   s    zCreativeDirector.saveÚ
batch_sizeÚintúlist[CreativeBrief]c                   sb  g }t ƒ }t ƒ ‰| j d¡}| j d¡‰ t ¡ }tt| ¡   }| j d¡| ¡ kr,d }t	|ƒD ]~}| j
t|r<|h|£n|d�}t t¡}	t t¡}
t t¡}t t¡}t |d r^ddgng d¢¡}|d	krr|rr|d
 ˆ krr|}n‡ ‡fdd„tD ƒ}|s€t}t |¡}t||	|
|d
 t|d ƒ|||d�}| |¡ | |¡ ˆ |d
 ¡ |}|d
 ‰ q0|S )Nr’   r‘   r“   ©Úexcluderl   ÚsquareÚportrait)r¤   r¤   r¥   r   rD   c                   s(   g | ]}|d  ˆvr|d  ˆ kr|‘qS )rD   r   )Ú.0Úp©r‘   Úused_palettesr   r€   Ú
<listcomp>¹   s   ( z1CreativeDirector.assign_batch.<locals>.<listcomp>rE   )rs   rt   ru   rv   rw   rx   ry   rz   )Úsetrˆ   Úgetr   Útodayrj   ÚWEEKDAY_PALETTE_INDEXÚweekdayÚ	isoformatÚrangeÚ_pickÚLAYOUTSÚrandomÚchoiceÚ
TYPOGRAPHYÚBACKGROUNDSÚILLUSTRATION_STYLESÚVIDEO_STYLESrq   ÚlistÚappendÚadd)r‰   rŸ   ÚbriefsÚused_layoutsr’   r­   Úday_paletteÚirs   ÚtypoÚbgÚillustÚvideorz   ÚpalÚ
candidatesÚbriefr   r¨   r€   Úassign_batch    sL   





ø



zCreativeDirector.assign_batchr½   c                 C  s”   |D ]}| j  dg ¡ i t|ƒ¥dt ¡ jdd�i¥¡ q| j d dd … | j d< |rD|d j| j d< |d j| j d< t	 
¡  ¡ | j d	< |  ¡  d S )
Nr�   ÚatÚseconds)Útimespeci°ÿÿÿéÿÿÿÿr’   r‘   r“   )rˆ   Ú
setdefaultr»   r   r   Únowr°   rs   rv   r   r­   rž   )r‰   r½   Úbr   r   r€   ÚrecordÐ   s   ÿzCreativeDirector.recordé   Únrr   c                 C  s„   | j  d¡pg }|| d … }|sdS g }|D ]%}| d| d¡› d| d¡› d| d¡› d	| d
¡› d| d¡› �
¡ qd |¡S )Nr�   u*   (no prior posts â€” full creative freedom)z	- layout=rs   z	 palette=rv   z type=rt   z bg=ru   z style=rx   Ú
)rˆ   r¬   r»   Újoin)r‰   rÒ   r�   ÚrecentÚlinesr§   r   r   r€   Úrecent_summaryÜ   s    ÿÿÿÿ
zCreativeDirector.recent_summaryÚoptionsútuple[str, ...]r£   r«   c                   s$   ‡ fdd„| D ƒ}t  |pt| ƒ¡S )Nc                   s   g | ]}|ˆ vr|‘qS r   r   )r¦   Úor¢   r   r€   rª   ë   s    z*CreativeDirector._pick.<locals>.<listcomp>)r´   rµ   rº   )rØ   r£   Úpoolr   r¢   r€   r²   é   s   zCreativeDirector._pickc                 C  st   g }t |dƒD ]-\}}| d|d›d|j› d|j› d|j› d|j› d|j› d	|j› d
|j› d|j	› �¡ qd 
|¡S )Nrk   zidea-Ú02dz MUST use:
  layout: z
  typography: z
  background: z
  palette_name: z
  palette: z
  illustration_style: z
  video_style: z
  aspect: z

)Ú	enumerater»   rs   rt   ru   rv   rw   rx   ry   rz   rÔ   )r‰   r½   rÖ   rÀ   rÏ   r   r   r€   Úas_prompt_blockî   s,   
ÿþýüûúùøÿ
z CreativeDirector.as_prompt_blockN)r‚   r   )r‹   rŒ   )r‹   rš   )rŸ   r    r‹   r¡   )r½   r¡   r‹   rš   )rÑ   )rÒ   r    r‹   rr   )rØ   rÙ   r£   r«   r‹   rr   )r½   r¡   r‹   rr   )r{   r|   r}   Ú__doc__rŠ   r‡   rž   rÈ   rÐ   r×   Ústaticmethodr²   rÞ   r   r   r   r€   r�   �   s    




0r�   )Ú
__future__r   r•   r´   Údataclassesr   r   r   r   Úpathlibr   r³   r¶   r·   r¹   r¸   rj   r~   r®   rq   r�   r   r   r   r€   Ú<module>   s®    
ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à$ù