o
    rR8i                     @   s  d dl mZ d dlmZ d dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ d d	lmZmZmZ d d
lmZ d dlmZmZ eeeeddZdededefddZG dd dZG dd deZ G dd deZ!G dd deZ"dS )    )Iterable)joinN)pprint)	ApiClientConfigurationSendSmtpEmailTransactionalEmailsApi)ApiException)EnvironmentFileSystemLoader)select)	BASE_PATHget_dbsettings)GenericError)PasswordResetTokenUserTypesEnum	templates)loadertemplate_namecontextreturnc                 C   s   t | }||S )N)templates_envZget_templaterender)r   r   template r   /app/core/email/config.pyrender_template   s   

r   c                   @   st   e Zd Zdd ZdedefddZdedefdd	Zdefd
dZ	defddZ
dedefddZdefddZdS )Emailc                 O   s  t  }d|jd< d|jd< tt|| _| |dg | _| |dg | _| |dg | _	|dd| _
|d	d| _|d
d| _|dddd| _| jr^| | js^td|dddd| _|dd| _|di | _|di | _|dg | _|d| _d S )NzYxkeysib-2fa4c56469df0ac61786c9f5818f56b889f57cb816b72d2af5da5e75108c740c-xNauXsRMU9JHKkkFzapi-keyzpartner-keytobcccchtml_content text_contentsubjectreply_toznoreply@wacarts.co.ukzWac ArtsemailnameInvalid format for reply tosender)r)   r(   
attachmentheadersmessage_versionstagsscheduled_at)r   api_keyr   r   api_instancevalidate_email_name_formatgetr   r    r!   r"   r$   r%   r&   validate_email_name_dict
ValueErrorr+   r,   r-   r.   r/   r0   )selfargskwargsconfigurationr   r   r   __init__   s2   




zEmail.__init__valuer   c                 C   s"   t |trt| ddhkS dS )Nr(   r)   F)
isinstancedictsetkeys)r7   r<   r   r   r   r5   4   s   
zEmail.validate_email_name_dictemailsc                 C   s   t |trtt| j|S dS )NF)r=   r   allmapr5   r7   rA   r   r   r   is_email_name_format9   s   
zEmail.is_email_name_formatc                 C   s   |  |r|S td)NzInvalid format for emails)rE   r6   rD   r   r   r   r3   C   s   
z Email.validate_email_name_formatc                 C   s.   | j | j| j| j| j| j| j| j| j| j	d
S )N
r   r    r!   r$   r%   r&   r,   r-   r/   r+   rF   )r7   r   r   r   send_email_kwargsH   s   zEmail.send_email_kwargsemail_kwargsc                 C   s   | ds|dd  | ds|dd  | ds!|dd  | ds,|dd  | ds7|dd  | dsD|dd  d S d S )Nr,   r$   r!   r    r-   r/   )r4   pop)r7   rH   r   r   r   remove_unused_email_kwargsV   s   





z Email.remove_unused_email_kwargsc           
   
   K   s   |  |d| j}|  |d| j}|  |d| j}|d| j}| |s.td|  }|	| |j	||||d | 
| tdi |}z	| j|}|W S  tyn }	 ztd|	  W Y d }	~	d S d }	~	ww )	Nr   r    r!   r&   r*   )r   r    r!   r&   z3Exception when calling AccountApi->get_account: %s
r   )r3   r4   r   r    r!   r&   r5   r6   rG   updaterJ   r   r2   send_transac_emailr	   print)
r7   r9   r   r    r!   r&   rH   Zsend_email_objectapi_responseer   r   r   
send_emaild   s6   


zEmail.send_emailN)__name__
__module____qualname__r;   r>   boolr5   listrE   r3   rG   rJ   intrP   r   r   r   r   r      s    
r   c                       s.   e Zd Zdef fddZ fddZ  ZS )SendForgotPasswordEmailtoken_instancec                    s   t  A}|| _t|jdj}|t||j|j	k}d | _
| }|d u r-tddd|| _
|j|jd}|gdd}W d    n1 sGw   Y  d| _t jd	i | d S )
N)r<   i  zUser not found)status_codemessager'   zForgot password email link)r   r%   zreset-password.htmlr   )r   rX   r   	user_typemodelexecuter   whereiduser_idZuser_instancescalar_one_or_noner   r(   
first_namehtml_templatesuperr;   )r7   rX   dbZUserTypeModelresultZuser_objectZrecipient_objectdata	__class__r   r   r;      s4   
z SendForgotPasswordEmail.__init__c                    s\   | d| j}td d| jj d| jjj }|jt	|d|idd t
 jdi |S )	Nrc   
APP_UI_URLz/password-reset?token=z&user_type=urlr   r"   r   )r4   rc   osgetenvrX   tokenr[   r<   rK   r   rd   rP   )r7   r9   rc   rk   rh   r   r   rP      s   $z"SendForgotPasswordEmail.send_email)rQ   rR   rS   r   r;   rP   __classcell__r   r   rh   r   rW      s    rW   c                       (   e Zd Z fddZ fddZ  ZS )SendWelcomeEmailc                       d| _ t j|i | d S )Nzwelcome.htmlrc   rd   r;   r7   r8   r9   rh   r   r   r;         zSendWelcomeEmail.__init__c                    s4   | d| j}|jt|i dd t jdi |S )Nrc   rl   rm   r   )r4   rc   rK   r   rd   rP   )r7   r9   rc   rh   r   r   rP      s   zSendWelcomeEmail.send_emailrQ   rR   rS   r;   rP   rq   r   r   rh   r   rs          rs   c                       rr   )SendEnrollmentEmailc                    rt   )Nzorder_purchase.htmlru   rv   rh   r   r   r;      rw   zSendEnrollmentEmail.__init__c                    s@   | d| j}|di }|jt||dd t jdi |S )Nrc   r   rl   rm   r   )r4   rc   rI   rK   r   rd   rP   )r7   r9   rc   r   rh   r   r   rP      s   zSendEnrollmentEmail.send_emailrx   r   r   rh   r   rz      ry   rz   )#collections.abcr   os.pathr   rn   r   brevo_pythonr   r   r   r   Zbrevo_python.restr	   jinja2r
   r   Zsqlalchemy.futurer   core.configr   r   r   core.security.exceptionsr   Zmodels.userr   r   r   strr>   r   r   rW   rs   rz   r   r   r   r   <module>   s&    f'