a
    Gõ!f$  ã                   @   s>   d dl Z d dlmZ d dlmZ d dlmZ G dd„ dƒZdS )é    N)ÚFirestoreService)ÚEnvironment)ÚSchedulingServicec                   @   sj   e Zd ZdZdZdZg d¢Zeddd„ƒZedd	„ ƒZ	ed
d„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZdS )Ú	AutopilotZsignupZ
acceptanceZcontent_verification)ÚugcÚinstagramStoryÚinstagramPostÚinstagramReelNc                 C   sd   | d u rt dƒ‚|tjkr(t | |¡ n8|tjkrBt | ||¡ n|tjkrXt | ¡ nt dƒ‚d S )Nzphone_number must be providedzInvalid event type)Ú
ValueErrorr   ÚSIGNUPÚchoose_offer_for_signup_triggerÚ
ACCEPTANCEÚ#choose_offer_for_acceptance_triggerÚCONTENT_VERIFICATIONÚ-choose_offer_for_content_verification_trigger)Úphone_numberÚeventÚ	client_idÚprev_offer_idÚprev_multiplier© r   ú:/var/www/html/python-backend/backend/services/autopilot.pyÚsend_targeted_offer   s    


zAutopilot.send_targeted_offerc           	      C   s’   |d u rt dƒ‚t | ¡ ¡ }|d }|D ](}|d |kr*| d¡s*tdƒ  d S q*t |¡ ¡ }t |¡}|| t 	¡  }d}t 
| ||¡ d S )Nz+client_id must be provided for signup eventÚacceptedOffersZclientIDZ	autoAddedzICanceling signup trigger: user already accepted an offer from this clientgš™™™™™é?)r
   r   Úget_user_fileÚto_dictÚgetÚprintZget_autopilot_filer   Ú"get_easiest_available_content_typeÚrandomly_pick_percent_or_cashÚsend_offer_to_wallet)	r   r   Ú	user_fileÚaccepted_offersÚofferÚautopilot_fileZeasiest_available_content_typeÚtargeted_offer_idÚ
multiplierr   r   r   r      s    
z)Autopilot.choose_offer_for_signup_triggerc                 C   s†   |d u rt dƒ‚|d u r t dƒ‚t | ¡ ¡ }|d }|D ]&}|d |kr:|d r:tdƒ  d S q:|}t|d dƒ}t | ||¡ d S )	Nz3prev_offer_id must be provided for acceptance eventz5prev_multiplier must be provided for acceptance eventr   ÚofferIDZfinalValidationz4Canceling acceptance trigger: offer already approvedgš™™™™™©?é   )r
   r   r   r   r   Úmaxr    )r   r   r   r!   r"   r#   r%   r&   r   r   r   r   5   s    z-Autopilot.choose_offer_for_acceptance_triggerc                 C   s:   |d u rt dƒ‚|d u r t dƒ‚|}|}t | ||¡ d S )Nz=prev_offer_id must be provided for content_verification eventz?prev_multiplier must be provided for content_verification event)r
   r   r    )r   r   r   r%   r&   r   r   r   r   J   s    z7Autopilot.choose_offer_for_content_verification_triggerc                 C   s,   t jD ] }|| v r| | d r|  S qd S )NZisActive)r   ÚSORTED_CONTENT_TYPES)r$   Úcontent_typer   r   r   r   X   s    

z,Autopilot.get_easiest_available_content_typec                   C   s   t   ¡ dkrdS dS )Ng      à?zofferID$zofferID%)Úrandomr   r   r   r   r   `   s    z'Autopilot.randomly_pick_percent_or_cash)NNN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r*   Ústaticmethodr   r   r   r   r   r   r   r   r   r   r      s    



r   )r,   Ú#services.firebase.firestore_servicer   Úenvironmentr   Ú&services.scheduling.scheduling_servicer   r   r   r   r   r   Ú<module>   s   