o
    ȟ1i0                  
   @   s   d dl Z d dlZd dlmZ d dlmZ d dlZd dlmZ d dlm	Z	 d dl
Z
d dlmZmZmZmZmZmZ d dlmZ dd	 Zd
efddZdefddZdededededef
ddZdS )    N)ApiException)pprint)MIMEMultipart)MIMEText)PaymentPaymentDetailsCourseEventPaymentParentParticipant)
joinedloadc              
   C   s   t  }d|jd< d|jd< t t |}d}|}ddd}|| dg}d	d
dg}	ddd}
ddi}ddd}t j||
||||d}z||}t| W d S  tyi } zt	d|  W Y d }~d S d }~ww )NzYxkeysib-95f872e745956cb947c7883aafea4eedc6be3d6985de238d9fa07b345619e3f6-WjgEWbs6cqb3GhGTzapi-keyzpartner-keyzOrder ConfirmationZWACznoreply@aatoon.com)nameemail)r   r   John Doezexample@example.comzSome-Custom-Namezunique-id-1234zMy param valuezNew Subject)	parametersubject)toreply_toheadershtml_contentsenderr   z3Exception when calling AccountApi->get_account: %s
)
brevo_pythonConfigurationapi_keyZTransactionalEmailsApiZ	ApiClientZSendSmtpEmailZsend_transac_emailr   r   print)to_nameZto_email_idcontentconfigurationZapi_instancer   r   r   r   Zbccr   r   paramsZsend_smtp_emailZapi_responsee r    /app/core/utility.py
send_email   s,   





r"   
payment_idc                 C   s  ddl m} ddl}ddlm} |j|jtd}t	|d}|
 }W d   n1 s/w   Y  ||}ddlm} ddlm}	 dd	lm}
 | ,}|ttj| k }|ttj| kttjtjttj }d}d}|r|jd
kr||	|	j|j k }|r|j!}|j"}n|jdkr||
|
j|j k }|r|j!}|j"}|sd}d}|t#}d}d}|D ]}|j}|r|jnd}|j}|j$}d}|r|j% d|j& ' }|r|dkr|j%pd}d}|r|j(r|j)r|j(*d d|j)*d }d}|r|j+}n|r/|j,r/|j-r/|j,*d d|j-*d }|| .||r:|j/nd||d|j0dd|j1dd ||j07 }||j0|j1 7 }qg }|2 D ]\}}|.|d d |d qaW d   n	1 s~w   Y  |j3|r|j4nd|r|j5r|j5*dnd|r|j5r|j5*dnd|d|dd|d|rd|j6dndd}t7||| d| dS ) zJ
    Dependency function to send order summary email using payment ID
    r   TemplateN)defaultdictz ../templates/order_purchase.htmlrget_db)r
   )r   parentparticipanttinspj1997@gmail.comr   zUnknown Participant To be determined%Y-%m-%d to z%I:%M %p - zUnknown Course   £z.2f)participant_namecourse_namedatetimeZactual_pricefinal_pricer3   )r3   coursesN/A%H:%M)order_idr5   r6   participant_datatotal_amounttotal_discounttotal_paid_amountz%Order summary email sent successfully)messager#   )8jinja2r%   oscollectionsr&   pathjoindirname__file__openreadcore.configr)   Zmodels.parentr
   Zmodels.participantr   queryr   filteridfirstr   r#   optionsr   courser   	time_slotpurchased_participantall	user_type
created_byr   	full_namelistpurchased_for_id
first_name	last_namestrip
start_dateend_datestrftimetitle
start_timeend_timeappendr   course_original_amountfinal_amountitemsrendertransaction_batch_idpaid_onr?   r"   )r#   r%   rB   r&   template_pathfiletemplate_contenttemplater)   r
   r   dbpaymentpayment_detailsto_emailr   r*   r+   Zparticipant_coursesr=   r>   detailrP   rQ   participant_idr3   Zcourse_datesZcourse_timesr<   r8   r   r    r    r!   send_order_summary_email*   s   


	



	
\



rs   event_payment_idc              
   C   s  ddl m} ddl}|j|jtd}t|d}| }W d   n1 s)w   Y  ||}ddl	m
} ddlm}m}	 | }
|
ttj| k }|
|	|	j|jkt|	j }d}d}|r|jdkr|
ttj|jk }|r|j}|j d	|j }n!|jd
kr|
ttj|jk }|r|j}|j d	|j }|sd}d}g }d}|D ]?}|j}|r||j |j!r|j"r|j!#d d|j"#d nd|j$r|j%r|j$ d|j% ndd|j& d ||j&7 }qW d   n	1 sw   Y  |j'|r|jnd|r |j(r |j(#dnd|r.|j(r.|j(#dnd|d| d|r>d|j) ndd}t*||| d| dS )z?
    Send event order summary email using event payment ID
    r   r$   Nz ../templates/event_purchase.htmlr'   r(   )Event	EventCartr*   r-   r+   r,   r   r/   r0   r.   r1   r2   )r   r5   r6   r7   r9   r:   u   £0.00)r;   r5   r6   Zcourse_datar=   r>   r?   z+Event order summary email sent successfully)r@   rt   )+rA   r%   rB   rD   rE   rF   rG   rH   rI   rJ   r)   modelsru   rv   rK   r	   rL   rM   rN   rg   rO   r   eventrS   rT   r
   user_idr   rY   rZ   r   rb   r   event_start_dateevent_end_dater^   event_start_timeevent_end_timepricerf   rh   r=   r"   )rt   r%   rB   ri   rj   rk   rl   r)   ru   rv   rm   event_paymentevent_cartsrp   r   r*   r+   
event_datar=   cartrx   r   r    r    r!   send_event_order_summary_email   s~   





, 

/

r   r   rp   r   r   returnc              
   C   s  d}d}d}d}t d}||d< d|d< |  d	| d
|d< t|d}	||	 zAt }
d|
_tj|
_t	||!}|
  |j|
d |
  ||| || W d   n1 s^w   Y  dd|dW S  ty } zddt| |dW  Y d}~S d}~ww )a%  
    Send email using Brevo SMTP with HTML content
    
    Args:
        to_name: Recipient name
        to_email: Recipient email address
        subject: Email subject
        html_content: HTML content of the email
    
    Returns:
        dict: Status of the email sending operation
    zsmtp-relay.brevo.comiK  z7383c9001@smtp-brevo.comZkxqgrBLjdYAw9WnPalternativeSubjectzWAC <noreply@aatoon.com>Fromz <>TohtmlF)contextNsuccesszEmail sent successfully)statusr@   Z	recipienterrorzFailed to send email: )r   r   attachsslcreate_default_contextcheck_hostname	CERT_NONEverify_modesmtplibSMTPehlostarttlsloginsend_message	Exceptionstr)r   rp   r   r   Zsmtp_serverZ	smtp_portZsmtp_usernameZsmtp_passwordmsgZ	html_partr   serverr   r    r    r!   send_email_smtp   s@   

r   )r6   r   Zbrevo_python.restr   r   r   Zemail.mime.multipartr   Zemail.mime.textr   r   rw   r   r   r   r	   r
   r   sqlalchemy.ormr   r"   r   rs   r   dictr   r    r    r    r!   <module>   s     ~"O