o
    6k~i4                     @   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ZG dd dejZG d	d
 d
eZG dd dejZG dd dejZG dd dejZdS )    )AbstractUser)models)gettext_lazy)timezone)	timedeltaNc                   @   s<   e Zd ZdedfZdedfZdedfZdedfZd	S )
UserRolesuper_adminzSuper AdminadminAdminplace_adminPlace AdminuserUserN)__name__
__module____qualname___SUPER_ADMINADMINPLACE_ADMINUSER r   r   4/var/www/newdalilibackend/backend/accounts/models.pyr   	   s
    r   c                   @   sn  e Zd ZdZejdejeje	ddZ
ejddde	ddZejddde	d	d
Zejde	ddZejde	ddZejde	ddZejddg de	ddZejddg de	ddZejde	ddZejddde	ddZejdddg de	ddZejdddde	ddZejdd Zejdd!ZG d"d# d#Zd$d% Zed&d' Zed(d) Zed*d+ Z d,S )-r   zCustom User Model   Role)
max_lengthchoicesdefaultverbose_nameTPhone)r   blanknullr   zavatars/Avatar)	upload_tor    r!   r   FzIs Verifiedr   r   zEmail VerifiedzPhone Verified
   ar))r&   Arabic)kuKurdish)enEnglishLanguage)r   r   r   r   system))r-   System)lightLight)darkDarkThemezNotifications Enabled   z	FCM Token))googleGoogle)appleApple)facebookFacebookzSocial Provider)r   r    r!   r   r   z	Social ID)r   r    r!   uniquer   auto_now_addauto_nowc                   @   "   e Zd ZedZedZdgZdS )z	User.Metar   Users-created_atNr   r   r   r   r   verbose_name_pluralorderingr   r   r   r   MetaX       
rF   c                 C   s   | j S N)usernameselfr   r   r   __str__]   s   zUser.__str__c                 C      | j tjkS rH   )roler   r   rJ   r   r   r   is_super_admin`      zUser.is_super_adminc                 C   rM   rH   )rN   r   r   rJ   r   r   r   is_admind   rP   zUser.is_adminc                 C   rM   rH   )rN   r   r   rJ   r   r   r   is_place_adminh   rP   zUser.is_place_adminN)!r   r   r   __doc__r   	CharFieldr   r   r   r   rN   phone
ImageFieldavatarBooleanFieldis_verifiedemail_verifiedphone_verifiedlanguagethemenotifications_enabled	fcm_tokensocial_provider	social_idDateTimeField
created_at
updated_atrF   rL   propertyrO   rQ   rR   r   r   r   r   r      s    

r   c                   @   s   e Zd ZdZejeejdeddZ	ej
ddeddZejdd	Zejed
dZejdeddZG dd dZdd Zdd Zedd ZdS )PasswordResetTokenzPassword Reset Token Modelpassword_reset_tokensr   	on_deleterelated_namer   d   TToken)r   r;   r   r<   
Expires Atr   FUsedr$   c                   @   r@   )zPasswordResetToken.MetazPassword Reset TokenzPassword Reset TokensrB   NrC   r   r   r   r   rF   z   rG   rF   c                 C   s   | j j d| jd d  dS )N - r%   z...)r   rI   tokenrJ   r   r   r   rL      s   zPasswordResetToken.__str__c                 C      | j  o
t | jk S )zCheck if token is validusedr   now
expires_atrJ   r   r   r   is_valid      zPasswordResetToken.is_validc                 C   s.   t d}t tdd }| jj|||dS )z#Generate a new password reset token       )hours)r   rq   rv   )secretstoken_urlsafer   ru   r   objectscreate)clsr   rq   rv   r   r   r   generate_token   s   
z!PasswordResetToken.generate_tokenN)r   r   r   rS   r   
ForeignKeyr   CASCADEr   r   rT   rq   rb   rc   rv   rX   rt   rF   rL   rw   classmethodr   r   r   r   r   rf   m   s"    rf   c                   @   s   e Zd ZdZG dd dejZejeej	de
ddZejdeje
dd	Zejd
e
ddZejddZeje
ddZejde
ddZG dd dZdd Zdd Zedd ZdS )VerificationCodez'Verification Code Model for Email/Phonec                   @   s$   e Zd ZdedfZdedfZdS )z!VerificationCode.VerificationTypeemailEmailrU   r   N)r   r   r   r   EMAILPHONEr   r   r   r   VerificationType   s    r   verification_codesr   rh   r%   Type)r   r   r      Code)r   r   Tr<   rm   rn   Fro   r$   c                   @   r@   )zVerificationCode.MetazVerification CodezVerification CodesrB   NrC   r   r   r   r   rF      rG   rF   c                 C   s   | j j d| j d| j S Nrp   )r   rI   typecoderJ   r   r   r   rL      s   zVerificationCode.__str__c                 C   rr   )zCheck if code is validrs   rJ   r   r   r   rw      rx   zVerificationCode.is_validc                 C   s>   d dd tdD }t tdd }| jj||||dS )z Generate a new verification code c                 S   s   g | ]	}t td qS )r%   )strr|   	randbelow).0r   r   r   r   
<listcomp>   s    z2VerificationCode.generate_code.<locals>.<listcomp>r   r%   )minutes)r   r   r   rv   )joinranger   ru   r   r~   r   )r   r   verification_typer   rv   r   r   r   generate_code   s   zVerificationCode.generate_codeN)r   r   r   rS   r   TextChoicesr   r   r   r   r   r   rT   r   r   r   rb   rc   rv   rX   rt   rF   rL   rw   r   r   r   r   r   r   r      s.    r   c                   @   s   e Zd ZdZejeejdeddZ	ej
dejdeddZejeded	d
ZejdeddZejdeddZejdeddZejdeddZejddZejddZG dd dZdd ZdS )
PlaceAdminz!Place Admin - Links User to Placeplace_admin_profiler   rh   zplaces.PlaceadminsPlaceTPermissions)r   r    r   zCan Manage Bookingsr$   zCan Manage ReviewszCan Manage OfferszCan Manage Place Infor<   r>   c                   @   s$   e Zd ZedZedZddgZdS )zPlaceAdmin.Metar   zPlace Adminsr   placeN)r   r   r   r   r   rD   unique_togetherr   r   r   r   rF      s    rF   c                 C   s   | j j d| jj S r   )r   rI   r   namerJ   r   r   r   rL      s   zPlaceAdmin.__str__N)r   r   r   rS   r   OneToOneFieldr   r   r   r   r   r   	JSONFielddictpermissionsrX   can_manage_bookingscan_manage_reviewscan_manage_offerscan_manage_place_inforb   rc   rd   rF   rL   r   r   r   r   r      sN    r   )django.contrib.auth.modelsr   	django.dbr   django.utils.translationr   r   django.utilsr   datetimer   r|   r   r   r   Modelrf   r   r   r   r   r   r   <module>   s    ]%/