a
    e                     @   s^  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 d dl	m
Z
 d dlmZmZmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZmZmZ d dlmZmZmZmZ ddlT d dl Z d dlmZm!Z! d dl"Z"d dl#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,Z,d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 dd Z5e
j6Z7e
j8Z9e
j:Z;e
j<Z=e
j>Z?e
j@ZAee7e9ZBG dd deZCG dd deZDG dd  d eZEG d!d" d"eZFG d#d$ d$eZGG d%d& d&eZHG d'd( d(eZIG d)d* d*eZJG d+d, d,eZKG d-d. d.eZLG d/d0 d0eZMG d1d2 d2eZNG d3d4 d4eZOG d5d6 d6eZPdS )7    )render)APIView)Responsestatus)datetime)settings)	SyncGrant	ChatGrant
VideoGrant)Client)AccessToken)authenticatedseerauthenticated)SeerUserSeerUserNotificationsFortuneAppointmentBook)FortuneTellerFotuneTellerWalletFortuneTellerTranscationsFortuneTellerNotifications   )*N)r   	timedelta)	timesince)QCount)FCMNotification)GeneralSettings)TransferToConnectedAccount)render_to_string)messages)mailc                  C   s`   t j  } | rX| jsdS | j}|dd  }t|d }t|}|d}dt| S dS d S )NTRANS000001   r   TRANS)r   objectsalllasttranscation_idintstrzfill)lastObjtheId r/   2/var/www/html/Ryun_Seer/seer/conversation/views.pygenerateTranscationsIdFortune!   s    
r1   c                   @   s   e Zd Zdd ZdS )CreateConversationc           )   
   C   s  zzt |}W n< tyL } z$tdt|itjdW  Y d }~W S d }~0 0 tjj|d	 }|sxtdditj
dW S |j}|d}|d}|stdditjdW S |stdditjdW S tjj|d	 }tjj|d	 }	|s tdd	itj
dW S |	stdd
itj
dW S t|j}
t|j}|	j}|	j}ttj|d\}}t|d | d}t|d | d}|
|}|
|}||}||}tt|j}||krtdditjdW S ||k rtdditjdW S tjj||d	 }|r4|j|	_|	  |j}tt j!}|j"dkrvddd|j# d |j$ d |j%|j|d}t&|dj'||d}|j"dkrd}d|j# d |j$ d }ddd|j# d |j$ d |j%t|j#d t|j$ |j|d}t&|dj'||||d}t(jj)d|j# d |j$ d d|d td |jd!tj*dW S t|j#t|j# t|j+ t|j+ }t,|}t-.| d"/|} t0j1j2j1j)| d#}!tjj)||d}"|!j3|"_t |"_4|"  |!j3|	_|	  t|j+t|j#d t|j$ t|j5d$}#t67|#}$t0j1j21|!j3j8j)t|j+|$d%}%t|j+t|j#d t|j$ t|j%d$}&t67|&}'t0j1j21|!j3j8j)t|j+|'d%}(|%j3|"_9|(j3|"_:|"  |j}tt j!}|j"dkrddd|j# d |j$ d |j%|"j|d}t&|dj'||d}|j"dkrPd}d|j# d |j$ d }ddd|j# d |j$ d |j%|"j|d}t&|dj'||||d}t(jj)d|j# d |j$ d d|d td&|"jd!W S  ty } z"tdt|itj;dW  Y d }~S d }~0 0 d S )'Nmessager   idFortune teller not foundseer_idappointment_idseer_id is  requiredappointment_id is  requiredSeer User not foundappointment not found- %d %B %Y %I:%M %pThe appointment has expired.!The appointment is in the future.)fortune_teller	seer_userAndroidconversation_startCHAT STARTED FROM FORTUNE SIDEzYour Chat have started with, Please Join!)typetitler3   imagetwilio_channel_sidr8   api_keyregistration_iddata_messageIos)rF   zYour Chat start with  please join.)rH   rI   r3   rJ   namerK   r8   rO   message_titlemessage_bodyrP   r3   notification_typerC   Conversation already existsr3   rK    Zfriendly_namer5   rS   rJ   identity
attributessuccess)<r   	Exceptionr   r+   r   HTTP_401_UNAUTHORIZEDr   r&   filterfirstHTTP_404_NOT_FOUNDdatagetHTTP_400_BAD_REQUESTr   r   pytztimezoneappointment_timeappointment_datemapstripsplitr   strptimelocalize
astimezonenowConversationrK   save	fcm_tokenr   FIREBASE_SERVER_KEYdevice_type
first_name	last_namerJ   r   notify_single_devicer   createHTTP_200_OKr5   listrandomshufflejoinclientconversationsv1sidlast_messageprimary_imagejsondumpsparticipantsseer_user_twilio_idfortune_teller_twilio_idHTTP_500_INTERNAL_SERVER_ERROR))selfrequestuiderB   rg   seer_user_idr8   rC   appointment_objuser_timezonefortune_timezonerl   rm   booked_start
booked_endappointment_datetime_startappointment_datetime_endstart_time_user_timezoneend_time_user_timezonestart_time_fortuneend_time_fortunecurrent_timeexisting_conversationrO   
server_keyrP   resultrU   rV   concatinate_namessuffle_stringconversation_nameconversationconversation_objseer_user_attributesseer_json_attributesseer_user_participantZfortune_teller_attributesZfortune_json_attributesZfortune_teller_participantr/   r/   r0   post;   s   .








&(









&zCreateConversation.postN__name__
__module____qualname__r   r/   r/   r/   r0   r2   :   s   r2   c                   @   s   e Zd Zdd ZdS )CreateUserToUserConversationc              
   C   s  zbzt |}W n< tyL } z$tdt|itjdW  Y d }~W S d }~0 0 tjj|d	 }|sxtdditj
dW S |j}|d}|stdditjdW S tjj|d	 }|stdditj
dW S tjt||dt||d	B 	 }|rtd
|jdtjdW S t|jt|j t|j t|j }	t|	}
t|
 d|
}tjjjj|d}tjj||d}|j|_t |_|   t|jt|jd t|j! t|j"d}t#$|}tjj|jj%jt|j|d}t|jt|jd t|j! t|j"d}t#$|}tjj|jj%jt|j|d}|j|_&|j|_'|   td|jdW S  ty } z"tdt|itj(dW  Y d }~S d }~0 0 d S )Nr3   r   r4   user not foundr7   r9   r;   )seer_user_oneseer_user_two_id)seer_user_one_idseer_user_tworY   rZ   r[   r\   )r   r   r>   r]   r^   ra   ))r   rb   r   r+   r   rc   r   r&   rd   re   rf   rg   rh   ri   SeerUserConversationr   rK   r~   rz   r5   r   r   r   r   r   r   r   r}   r   r   rt   r   rv   r{   r   r   r   r   seer_user_one_twilio_idseer_user_two_twilio_idr   )r   r   r   r   seer_user_objrg   r   rC   r   r   r   r   r   r   r   r   r   Zseer_user_obj_attributesZseer_two_json_attributesZseer_user_obj_participantr/   r/   r0   r      sr    .


(








z!CreateUserToUserConversation.postNr   r/   r/   r/   r0   r      s   r   c                   @   s   e Zd Zdd ZdS )ConversationListc           	   
   C   s   zzt |}W n< tyJ } z$tdt|itjdW  Y d }~W S d }~0 0 tjj|d	 }|svtdditj
dW S tjj|d}g }|D ]}|j|jd}|| qtd|dW S  t y } z"tdt|itjdW  Y d }~S d }~0 0 d S )	Nr3   r   r4   r6   rB   )r5   rK   ra   r3   rg   )r   rb   r   r+   r   rc   r   r&   rd   re   rf   ru   r5   rK   appendr   )	r   r   r   r   rB   r   conversation_listr   conversation_datar/   r/   r0   rh   ]  s$    .zConversationList.getNr   r   r   rh   r/   r/   r/   r0   r   \  s   r   c                   @   s   e Zd Zdd ZdS )SeerUserConversationListc              
   C   s  zpzt |}W n< tyL } z$tdt|itjdW  Y d }~W S d }~0 0 tjj|d	 }|sxtdditj
dW S tjt|dt|dB }g }|D ]}|j|kr|jn|j}tjj|jjjddd	}	d
}
d
}d
}|	D ]F}|jr
|j}
t|jd }|j}q|jrd}
t|jd }|j}q|j|jt|jd t|j |j|
||d}|| qtd|dW S  ty } z"tdt|itjdW  Y d }~S d }~0 0 d S )Nr3   r   r4   r   )r   )r   descr   )orderlimitr[   z agofiler>   )r5   rK   rS   rJ   r   timemessage_datera   r   )r   rb   r   r+   r   rc   r   r&   rd   re   rf   r   r   r   r   r   r   r   rK   r!   r   bodyr   Zdate_createdmediar5   rz   r{   r   r   r   )r   r   r   r   r   r   r   r   Z
other_userr!   r   r   r   recordr   r/   r/   r0   rh   w  sR    .	zSeerUserConversationList.getNr   r/   r/   r/   r0   r   v  s   r   c                   @   s   e Zd Zdd ZdS )DeleteConversationc              
   C   s~   z>t j }|D ] }tjj|j  |  qtddiW S  t	yx } z"tdt
|itjdW  Y d }~S d }~0 0 d S )Nr3   ra   r   )r   r&   r'   r   r   r   rK   deleter   rb   r+   r   r   )r   r   r   Zcoverr   r/   r/   r0   r     s    

zDeleteConversation.postNr   r/   r/   r/   r0   r     s   r   c                   @   s   e Zd Zdd ZdS )CreateTokenc              
   C   s   zzt |}W n< tyL } z$tdt|itjdW  Y d }~W S d }~0 0 tjj|d	 }|sxtdditj
dW S |j}|j}|d}|stdditjdW S tjj|d	 }|stdditj
dW S |j}	|j}
ttj|	d\}}t|
d	 |  d
}t|jj}t|j}||}||}tt|j}||kr^|| }ntdd||  }| }ttt t!|d}t"rt#t"d}|$| |||% d}td|dW S  ty } z"tdt|itj&dW  Y d }~S d }~0 0 d S )Nr3   r   r4   r6   r8   r:   r<   r=   r>   r?   r   daysr_   Zservice_sidr_   Zremain_timetokenToken Created Successfullyr   )'r   rb   r   r+   r   rc   r   r&   rd   re   rf   rg   r5   rh   ri   r   rl   rm   rn   ro   rp   r   rq   rj   rk   rC   rr   rs   rt   r   r   account_sidapi_sid
api_secretchat_service_sidr
   	add_grantto_jwtr   )r   r   r   r   rB   rg   r_   r8   r   rl   rm   r   r   appointment_datetimer   r   r   r   current_datetimetime_differencer   
chat_grantalldatar/   r/   r0   r     sP    .






zCreateToken.postNr   r/   r/   r/   r0   r     s   r   c                   @   s   e Zd Zdd ZdS )CreateTokenTwoc           
   
   C   s  zzt |}W n< tyJ } z$tdt|itjdW  Y d }~W S d }~0 0 tjj|d	 }|svtdditj
dW S |j}|j}tttt|d}trttd}|| || d}	td|	d	W S  ty } z"tdt|itjdW  Y d }~S d }~0 0 d S )
Nr3   r   r4   r6   r   r   )r_   r   r   r   )r   rb   r   r+   r   rc   r   r&   rd   re   rf   rg   r5   r   r   r   r   r   r
   r   r   r   )
r   r   r   r   rB   rg   r_   r   r   r   r/   r/   r0   r     s(    .

zCreateTokenTwo.postNr   r/   r/   r/   r0   r     s   r   c                   @   s   e Zd Zdd ZdS )CreateSeerUserTokenc              
   C   s  zzt |}W n< tyL } z$tdt|itjdW  Y d }~W S d }~0 0 tjj|d	 }|sxtdditj
dW S |j}|j}|d}|rNtjj|d	 }|stdditj
dW S |j}	|j}
ttj|	d\}}t|
d |  d	}t|j}||}tt|j}||kr4|| }ntd
d||  }| }nd }tttt|d}tr|t td}|!| t"j#j$%tj&' j(dddd}|||) d}td|dW S  ty } z"tdt|itj*dW  Y d }~S d }~0 0 d S )Nr3   r   r4   r   r8   r<   r=   r>   r?   r   r   r   r   Tdefaultz5You have a new message in ${CONVERSATION}: ${MESSAGE})Znew_message_enabledZnew_message_soundZnew_message_templater   r   r   )+r   rb   r   r+   r   rc   r   r&   rd   re   rf   rg   r5   rh   r   rl   rm   rn   ro   rp   r   rq   rj   rk   rr   rt   r   r   r   r   r   r   r
   r   r   r   r   servicesconfigurationnotificationsupdater   r   )r   r   r   r   r   rg   r_   r8   r   rl   rm   r   r   r   r   r   r   r   r   notificationr   r/   r/   r0   r   =  sZ    .






zCreateSeerUserToken.postNr   r/   r/   r/   r0   r   <  s   r   c                   @   s   e Zd Zdd ZdS )CreateVideoRoomc               
   C   s  zBzt |}W n< tyL } z$tdt|itjdW  Y d }~W S d }~0 0 tjj|d	 }|sxtdditj
dW S |j}|d}|d}|d}|stdditjdW S |stdd	itjdW S |stdd
itjdW S tjj|d	 }	tjj|d	 }
|	s"tdditj
dW S |
s<tdditj
dW S t|	j}t|j}|
j}|
j}ttj|d\}}t|d | d}t|d | d}||}||}||}||}tt|j}||krtdditjdW S ||k rtdditjdW S tjjjj d|d}t!jj |j"d}||
_#|
$  |	j%}tt&j'}|	j(dkrddd|j) d |j* d |j+|j"||d}t,|dj-||d}|	j(dkrd}d|j) d |j* d  }ddd|j) d |j* d |j+|j"||d}t,|dj-||||d!}t.jj d|j) d |j* d d|	d" td#|j"d$W S  ty } z"tdt|itj/dW  Y d }~S d }~0 0 d S )%Nr3   r   r4   r6   	room_namer8   user_idroom_name is  requiredr:   zuser_id is  requiredr;   r<   r=   r>   r?   r@   rA   zhttp://example.org)Zstatus_callbackZunique_name)twilio_room_sidrD   Zvideo_startVIDEO STARTED FROM FORTUNE SIDEz!Your Video Chat have started withrG   )rH   rI   r3   rJ   r   r   r8   rL   rN   rQ   )r   zYour Video Chat start with rR   rT   rW   ra   )r3   r   )0r   rb   r   r+   r   rc   r   r&   rd   re   rf   rg   rh   ri   r   r   rj   rk   rl   rm   rn   ro   rp   r   rq   rr   rs   rt   r   videor   Zroomsr}   
VideoRoomsr   twilio_room_namerv   rw   r   rx   ry   rz   r{   rJ   r   r|   r   r   ) r   r   r   r   rB   rg   r   r8   r   rC   r   r   r   rl   rm   r   r   r   r   r   r   r   r   r   roomZvideo_room_objrO   r   rP   r   rU   rV   r/   r/   r0   r     s    .









	&zCreateVideoRoom.postNr   r/   r/   r/   r0   r     s   r   c                   @   s   e Zd Zdd ZdS )CreateVideoTokenc              
   C   sN  z
zt |}W n< tyL } z$tdt|itjdW  Y d }~W S d }~0 0 tjj|d	 }|sxtdditj
dW S |j}t|jd t|j t|j d t|j  }}|d}|stdditjdW S |d}| stdd	itjdW S tjj|d	 }	|	s$tdd
itj
dW S |	j}
|	j}ttj|
d\}}t|d |  d}t|	jj}t|j}||}||}tt|j}||kr|| }nt dd||  }| }t!t"t#t$|d}t%|d}|&| |||' d}td|dW S  tyH } z"tdt|itj(dW  Y d }~S d }~0 0 d S )Nr3   r   r4   r6   ,r   r   r8   r:   r<   r=   r>   r?   r   r   r   r   r   r   r   ))r   rb   r   r+   r   rc   r   r&   rd   re   rf   rg   r5   rz   r{   rJ   rh   ri   r   rl   rm   rn   ro   rp   r   rq   rj   rk   rC   rr   rs   rt   r   r   r   r   r   r   r   r   r   )r   r   r   r   rB   rg   r_   r   r8   r   rl   rm   r   r   r   r   r   r   r   r   r   r   video_grantr   r/   r/   r0   r     sT    .4







zCreateVideoToken.postNr   r/   r/   r/   r0   r     s   r   c                   @   s   e Zd Zdd ZdS )CreateSeerUserVideoTokenc              
   C   s6  zzt |}W n< tyL } z$tdt|itjdW  Y d }~W S d }~0 0 tjj|d	 }|sxtdditj
dW S |j}t|jd t|j t|j d t|j  }}|d}|stdditjdW S |d}| stdd	itjdW S tjj|d	 }	|	s$tdd
itj
dW S |	j}
|	j}ttj|
d\}}t|d |  d}t|j}||}tt|j}||kr|| }ntdd||  }| }tt t!t"|d}t#|d}|$| |||% d}td|dW S  ty0 } z"tdt|itj&dW  Y d }~S d }~0 0 d S )Nr3   r   r4   r   r   r   r   r8   r:   r<   r=   r>   r?   r   r   r   r   r   r   r   )'r   rb   r   r+   r   rc   r   r&   rd   re   rf   rg   r5   rz   r{   r   rh   ri   r   rl   rm   rn   ro   rp   r   rq   rj   rk   rr   rt   r   r   r   r   r   r   r   r   r   )r   r   r   r   rC   rg   r_   r   r8   r   rl   rm   r   r   r   r   r   r   r   r   r   r/   r/   r0   r   ;  sP    .4






zCreateSeerUserVideoToken.postNr   r/   r/   r/   r0   r   :  s   r   c                   @   s   e Zd Zdd ZdS )FinishAppointmentc              
   C   s  z|j }|d}|s,tdditjdW S tjj|d }|sVtdditj	dW S d|_
d|_|  tj  }|r|j}|j|d	  }t|jt| }n
|j}d
}tjj|jjd }	t|	j||j}
tjj|jd }|r| j|7  _|  ntjj|j|d d}td|	j|	j|	jt  ||d}|}t!j"}|jj}t#j$||||g|d t%&|d t'jjdt(| d d|	d t)jjt* |j+|j|ddd tddiW S  t,y } z"tdt(|itj-dW  Y d }~S d }~0 0 d S )Nr8   r3   id is  requiredr   r4   r<   	CompletedTd   r   r   )rB   amountzPayment Receivedzpayout_approved_email.html)emailrz   r{   Zreceived_dater   Z
commission)html_messagezStatus changed successfullyz You have received a payment of $zsuccessfully.appointment_earning)r3   rX   rB   walletappointment)r)   rC   rB   r   payment_modetranscation_typera   ).rg   rh   r   r   ri   r   r&   rd   re   rf   appointment_statusappointment_completedrv   r   r'   commission_percentagepricer*   r   rB   r5   r   stripe_connect_account_idr8   r   r   r}   r    r   rz   r{   r   rt   r   EMAIL_HOST_USERr"   	send_mailr!   ra   r   r+   r   r1   rC   rb   r   )r   r   rg   r8   r   general_objcommision_percenttotal_amountcommision_amountfortune_objtranfer_amount
wallet_objsubjectr   plain_message
from_emailtor   r/   r/   r0   r     sJ    

"zFinishAppointment.postNr   r/   r/   r/   r0   r   ~  s   r   c                   @   s   e Zd Zdd ZdS )GetAppointmentc              
   C   s   zp|j }|d}|s*tdditjdW S tjj|d }|sTtdditj	dW S |j
|jd}td|d	W S  ty } z"tdt|itjdW  Y d }~S d }~0 0 d S )
Nr8   r3   r   r   r4   r<   )r  r  ra   r   )query_paramsrh   r   r   ri   r   r&   rd   re   rf   r  r  rb   r+   r   )r   r   rg   r8   r   all_datar   r/   r/   r0   rh     s    
zGetAppointment.getNr   r/   r/   r/   r0   r    s   r  c                   @   s   e Zd Zdd ZdS )dummyc              
   C   sZ   zddd}t d|dW S  tyT } z"t dt|itjdW  Y d }~S d }~0 0 d S )NZSimpleCheckZ"RM03d12a938b7fdf21308ff7de7693ef80)r   r   ra   r   r3   r   )r   rb   r+   r   r   )r   r   rg   r   r/   r/   r0   rh     s    z	dummy.getNr   r/   r/   r/   r0   r    s   r  )Qdjango.shortcutsr   rest_framework.viewsr   rest_framework.responser   rest_frameworkr   r   django.confr   Ztwilio.jwt.access_token.grantsr	   r
   r   twilio.restr   Ztwilio.jwt.access_tokenr   Zfortune_teller.authenticationr   r   seer_user.modelsr   r   r   Zfortune_teller.modelsr   r   r   r   modelsr   r   r   django.utils.timesincer   django.db.modelsr   r   pyfcmr   Zadmin_panel.modelsr   rj   Zadmin_panel.functionsr   django.template.loaderr    django.contribr!   django.corer"   r1   TWILIO_ACCOUNT_SIDr   TWILIO_AUTH_TOKEN
auth_tokenTWILIO_CHAT_SIDr   TWILIO_SYNC_SIDZsync_service_sidTWILIO_API_SIDr   TWILIO_API_SECRETr   r   r2   r   r   r   r   r   r   r   r   r   r   r   r  r  r/   r/   r/   r0   <module>   s^   
 E^7W+EfSD4(