U
    9d                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ eeZdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Ze	G dd dZdS )    N)	timedelta)timezone)	dataclass)ProcessedMedia)Subscription	Extentionc              
   C   sh   z| j j W S  tjk
rb } z4td|  dd tj	 d d D  W Y S d }~X Y nX d S )Nz,Function valid_extensions() With Exeption : c                 S   s   g | ]
}|j qS  )value).0vr   r   </var/www/html/UseVoiceDocker/src/apps/subscriptions/utils.py
<listcomp>   s     z$valid_extensions.<locals>.<listcomp>   )
subscriptionplanget_valid_extentionsr   DoesNotExistloggerwarningr   objectsalluserer   r   r   valid_extensions   s
    r   c                 C   s   | t |krdS dS )NTF)r   )Zfile_extentionrequestr   r   r   extention_file_valid   s     r   c                 C   s^   | j d }tj|\}}|ddt| jkr<| jjr<dS |ddt| jkrVdS dS d S )Nfilename. TF)POSTospathsplitextreplacer   r   is_staff)r   r   _file_extensionr   r   r   file_extension_valid   s    
  r(   c              
   C   sJ   z| j jjW S  tk
rD } ztd|  W Y dS d}~X Y nX dS )zG Return the file_size field of the Plan model associated with the user z4Function retrieve_elixir_of_size() With Exception : N)r   r   	file_size	Exceptionr   r   r   r   r   r   retrieve_elixir_of_size%   s
    r+   c              
   C   sJ   z| j jjW S  tk
rD } ztd|  W Y d S d }~X Y nX d S )Nz4Function retrieve_elixir_of_time() With Exception : )r   r   time_per_videor*   r   r   r   r   r   r   retrieve_elixir_of_time.   s
    r-   c                 C   s:   t |}|d kr0| |ks|jr0dd| ddS dddS )NFz3The file is too large for your plan [ file size <=  ]statusmessageTThe file is within the limit.)r+   r%   )r)   r   Z	file_planr   r   r   retrieve_limit_of_size7   s    r3   c              
   C   s   t |}zt|j|j|jd }W n6 tk
rZ } ztd|  d }W 5 d }~X Y nX | d kr|d kr| |ksz|j	rdd| ddS dddS )	N)hoursminutessecondsz9Inside Function retrieve_limit_of_duration() Exception : Fz7The file is too large for your plan [ file duration <= r.   r/   Tr2   )
r-   r   hourminutesecondtotal_secondsr*   r   r   r%   )Zfile_durationr   timedurationr   r   r   r   retrieve_limit_of_durationB   s    r=   c              
   C   s   t  }| }t| |}z| jjj}W n6 tk
r` } zt	
d|  d}W 5 d}~X Y nX |dkr~| jr~ddd|dS ||krdd||  d	|| |dS dd||  d	|| |dS dS )
z= Function that check if user reached his plan's videos limit z7Inside Function has_reached_upload_limit() Exception : NTzRest MEDIA are unlimited mediaInfinity)r0   r1   ZRest_MediasZUploaded_dayFzRest MEDIA are z media)r   nowdater   get_count_for_userr   r   videos_per_dayr*   r   r   r%   )r   r?   Zcurrent_dateZcount_mediaZlimit_mediar   r   r   r   has_reached_upload_limitS   s    rC   c                   @   s:   e Zd ZU dZeed< eed< dd Zdd Zdd	 Zd
S )CancelSubscriptionz0Class for keeping track of an item in inventory.	CLIENT_IDCLIENT_SECRETc                 C   s,   d}d|i}d}t j||| j| jfd}|S )z# method that generate paypal token Zclient_credentials
grant_typez0https://api-m.sandbox.paypal.com/v1/oauth2/token)dataauth)requestspostrE   rF   )selfrG   Zbody_paramsurlresponser   r   r   	gen_tokenq   s
    zCancelSubscription.gen_tokenc                 C   sT   |   jdkrLt|   j}|d }dd|i}tjd| |d}|S dS d S )N   access_tokenAuthorization	Bearer {}:https://api-m.sandbox.paypal.com/v1/billing/subscriptions/rM   headerszaccess denied)rO   status_codejsonloadstextformatrJ   getrL   sub_idrN   tokenrV   r   r   r   get_subscription_detailsy   s    z+CancelSubscription.get_subscription_detailsc                 C   sX   |   jdkrPt|   j}|d }d|dd}tjd| d|d}|S d	S d S )
NrP   rQ   rS   zapplication/json)rR   zContent-typerT   z/cancel?=&=rU   z Error Token expired or not exist)rO   rW   rX   rY   rZ   r[   rJ   rK   r]   r   r   r   cancel_subscription   s    z&CancelSubscription.cancel_subscriptionN)	__name__
__module____qualname____doc__str__annotations__rO   r`   ra   r   r   r   r   rD   k   s   
rD   )r!   loggingrX   rJ   datetimer   django.utilsr   Zdataclassesr   Zapps.process.modelsr   Zapps.subscriptions.modelsr   r   	getLogger__file__r   r   r   r(   r+   r-   r3   r=   rC   rD   r   r   r   r   <module>   s&   
		