o
    z=g                     @   s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZm	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	d
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dS )    )JsonResponseNResponse)ValidationError)datetime	timedelta)timezone)validation_msgSuccessc                 C   s   t d|| d|dS )Nsuccess)statusmsgdatar   r   )r   r   code r   3/var/www/html/authentication-server/utils/helper.pysuccess_response   s   r   c                 C   s   t d| d|dS )Nfailure)r   r   r   r   )r   r   r   r   r   failed_response   s   r   c                    s0   t jt jdd    d fddt| D S )N    c                 3   s    | ]}t  V  qd S )N)randomchoice).0_
charactersr   r   	<genexpr>   s    z'generate_random_text.<locals>.<genexpr>)stringascii_lowercasedigitsjoinrange)lengthr   r   r   generate_random_text   s   r%   c                 C   s   | d S N8   r   )bs_yearr   r   r   bs_to_ad$      r)   c                 C   s   | d S r&   r   )ad_yearr   r   r   ad_to_bs'   r*   r,   c                 C   s  t d}t d}t d}|| r7t|| d}t j}|dk s-||d kr5td| dd S || rdt|| d}t	|}|dk sW|t jd krbtd| d	| d
d S || r|| 
 \}}}	t|}t|}|	dkr||krtd|dk s|t jd krtd| d| dd S |	dkrt	|}
t	|}|
|krtd|
dk s|t jd krtd| d| dd S d S td)Nz^(\d{4}) AD$z^(\d{4}) BS$z^(\d{4}) - (\d{4}) (AD|BS)$r   il  
   zYear z is out of rangez BS (converted to z AD) is out of plausible rangeADz%Start year must be less than end yearzYear range z - z AD is out of rangeBSz'Start year should be less than end yearz BS is out of rangezRFiscal year format must be 'YYYY AD', 'YYYY BS', 'YYYY-YYYY AD', or 'YYYY-YYYY BS')recompilematchintgroupr   nowyearr   r)   groups)fiscal_year
ad_pattern
bs_patternrange_patternr6   current_yearr+   
start_yearend_year	year_typestart_adend_adr   r   r   validate_fiscal_year*   sF   






rB   c                 C   s   t d}zt| dd}W n ty   tdw |jd u r(t j	|} n|
t j} | 
|}|t k r@td| |S )NzAsia/KathmanduZz+00:00z<Invalid date format. Please provide a valid ISO date string.z3Deadline cannot be in the past. Provided deadline: )pytzr   r   fromisoformatreplace
ValueErrorr   tzinfoutclocalize
astimezoner5   )deadline_utckathmandu_tzdeadline_naivedeadline_kathmandur   r   r   validate_and_convert_deadlineM   s   


rP   c                 C   s   | j dkr9| jd}|r1zt|d}t|}td|iW S  ty0   ttd  dd Y S w tdd	iddS tdd
iddS )NPOSTdeadlinez%Y-%m-%d %H:%M:%Sremaining_timer   i  r   errorzDeadline not providedz!Invalid request method. Use POST.i  )	methodrQ   getr   strptimeget_deadline_remaining_timer   rG   r	   )requestdeadline_strrR   rS   r   r   r   calculate_remaining_time\   s   
r[   c                 C   s   | t   }|tdkrdS |j|j}}|d }|d d }|d }g }|dkr1|| d |dkr=|| d |dkrI|| d |dkrU|| d d	|S )
Nr   zDeadline has passedi  <   z day(s)z hour(s)z
 minute(s)z
 second(s)z, )r   r5   r   dayssecondsappendr"   )rR   time_remainingr]   r^   hoursminutes
time_partsr   r   r   rX   n   s"   
rX   )Nr
   N)django.httpr   r   r   rest_framework.responser   utils.exceptionr   r   r   r0   rD   django.utilsr   
utils.datar	   r   r   r%   r)   r,   rB   rP   r[   rX   r   r   r   r   <module>   s(    
#