Ë
    §‘ˆj3  ã                   óÊ   — d Z ddlZddlmZ ddlmZ ddlmZ  ej                  e	«      Z
 ed¬«       G d„ d	«      «       Z ed
d¬«      Zdedefd„Zdedefd„Zddedefd„Zy)a  Per-tenant branding for chatbot emails.

This is a multi-tenant product: a tenant's customers must see that tenant's
brand, not GalaxiQ's. Branding is resolved from the tenant's Organisation
record in the master database (businessName, image, website, email).

Coverage there is partial -- most organisations have a business name but no
logo -- so anything missing degrades rather than falling back to GalaxiQ's
identity. Showing one tenant's customers another company's logo would be worse
than showing no logo at all.
é    N)Ú	dataclass)Úbrandforge_profile)Úfetch_organisation_profileT)Úfrozenc                   ó¤   — e Zd ZU eed<   dZeed<   dZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed	<   dZeed
<   dZeed<   dZeed<   dZeed<   y)ÚBrandingÚnameÚ Úlogo_urlÚchatbot_urlÚprimary_colorÚaccent_colorÚ
font_stack© Úreference_linksÚreply_toFÚshow_ctaÚshow_unsubscribeÚunsubscribe_urlN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   r   r   r   r   r   Útupler   r   Úboolr   r   r   ó    ú6/var/www/html/strategist-ai/app/core/email_branding.pyr   r      sn   … à
ƒIØ€HˆcÓØ€K�ÓØ€M�3ÓØ€L�#ÓØ€J�ÓØ€O�UÓØ€HˆcÓØ€HˆdÓð #Ð�dÓ"Ø€O�SÔr   r   ÚGalaxiQzAhttps://studio.galaxiq.ai/uploads/1781693316095-Email_Logo_4_.png)r	   r   ÚurlÚreturnc                 ó`   — | xs dj                  «       } | sy| j                  d«      sd| z   } | S )Nr
   )zhttp://úhttps://r#   )ÚstripÚ
startswith)r    s    r   Ú_normalise_urlr&   .   s6   € ØŠ9�"×
Ñ
Ó
€CÙØØ�>‰>Ð1Ô2Ø˜3ÑˆØ€Jr   Úvaluec                 ó   — d| xs dv S )Nú@r
   r   )r'   s    r   Ú_looks_like_emailr*   7   s   € Ø�5’;˜BÐÐr   Ú	tenant_idc                 ó~  — | st         S t        | «      }	 t        | «      }|s|st         S |xs i }|j                  d«      xs dj                  «       }|rt        |«      r2|j                  d«      xs dj                  «       }t        |«      rdn|}t        |j                  d«      xs |xs t         j                  |j                  d«      xs t        |j                  d«      xs d«      t        |j                  d	«      xs d«      |j                  d
«      xs dj                  «       |j                  d«      xs d|j                  d«      xs d|j                  d«      xs dt        |j                  d«      xs d«      ¬«      S # t        $ r(}t        j                  d| › d|› �«       d}Y d}~�Œ—d}~ww xY w)zHResolve a tenant's email branding, falling back to GalaxiQ when unknown.zCould not load branding for z: NÚbusinessNamer
   r	   r   ÚimageÚwebsiteÚemailr   r   r   Úlinksr   )r	   r   r   r   r   r   r   r   )ÚGALAXIQ_BRANDINGr   r   Ú	ExceptionÚloggerÚerrorÚgetr$   r*   r   r	   r&   r   )r+   ÚbfÚorgÚexr	   Ú	candidates         r   Úbrand_for_tenantr;   ;   s„  € áÜÐô 
˜IÓ	&€BðÜ(¨Ó3ˆñ
 ‘rÜÐØ
Š)�€Cð
 �G‰G�NÓ#Ò) r×0Ñ0Ó2€DÙÔ$ TÔ*Ø—W‘W˜V“_Ò*¨×1Ñ1Ó3ˆ	Ü& yÔ1‰r°yˆäà�f‰f�V‹nÒ= Ò=Ô(8×(=Ñ(=à—‘˜
Ó#ÒM¤~°c·g±g¸gÓ6FÒ6LÈ"Ó'MÜ" 3§7¡7¨9Ó#5Ò#;¸Ó<Ø—'‘'˜'Ó"Ò( b×/Ñ/Ó1Ø—f‘f˜_Ó-Ò3°Ø—V‘V˜NÓ+Ò1¨rØ—6‘6˜,Ó'Ò-¨2Ü˜bŸf™f W›oÒ3°Ó4ôð øô! ò Ü�‰Ð3°I°;¸bÀÀÐEÔFØŽûðús   •F Æ	F<ÆF7Æ7F<)N)Ú__doc__ÚloggingÚdataclassesr   Ú$app.services.integrations.brandforger   Úapp.services.infra.databaser   Ú	getLoggerr   r4   r   r2   r   r&   r   r*   r;   r   r   r   ú<module>rB      s”   ðñ
ó Ý !å CÝ Bà	ˆ×	Ñ	˜8Ó	$€ñ �$Ô÷ð ó ðñ& Ø	ØPôÐ ð
˜ð  ó ð ˜Sð   Tó  ñ& ð &¨xô &r   