U
    <h                     @   s   d dl mZmZ d dlmZmZ d dlmZmZm	Z	m
Z
 d dlmZmZ d dlmZ G dd deeZG dd	 d	eeZG d
d deZdS )    )DocumentPydanticObjectId)FieldHttpUrl)OptionalDictAnyList)datetimedate)Enumc                   @   s   e Zd ZdZdZdZdS )ProfileVisibilityZpublicZprivateZfriends_onlyN)__name__
__module____qualname__PUBLICPRIVATEFRIENDS_ONLY r   r   J/var/www/html/Mana-Pige/backend/account-service/app/models/user_profile.pyr      s   r   c                   @   s   e Zd ZdZdZdZdS )ProfileStatusactive
incompleteZ	suspendedN)r   r   r   ACTIVE
INCOMPLETEZ	SUSPENDEDr   r   r   r   r      s   r   c                   @   s`  e Zd ZU eed< eed< eed< dZee ed< dZee ed< dZ	ee ed< e
ddd	Zee ed
< dZee ed< dZee ed< dZee ed< dZee ed< dZee ed< dZee ed< dZee ed< e
edZeeef ed< dZee ed< dZee ed< ejZeed< ejZeed< dZ e!ed< dZ"e!ed< dZ#e!ed< dZ$e!ed< e
e%j&dZ'e%ed< e
e%j&dZ(e%ed< dZ)ee% ed < e
edZ*eee+f ed!< e
e,dZ-e.e ed"< G d#d$ d$Z/G d%d& d&Z0ee d'd(d)Z1ed'd*d+Z2e!d'd,d-Z3d.d/ Z4d0d1 Z5e6d'd2d3Z7ee e6d4d5d6Z8e9eeed d7d8d9Z:dS ):UserProfileuser_idemailusernameN
first_name	last_namedisplay_namei  )
max_lengthbiophonewebsitecountrycityUTCtimezone
avatar_urlcover_photo_url)default_factorysocial_links
birth_dategender
visibilitystatusr   profile_completion_percentagefollowers_countfollowing_countposts_count
created_at
updated_at	last_seencustom_fieldstagsc                   @   s$   e Zd ZdZdddddddd	gZd
S )zUserProfile.Settingsuser_profilesr   r   r   r!   r1   r0   r6   r7   N)r   r   r   nameindexesr   r   r   r   SettingsD   s   r>   c                   @   s   e Zd ZdZdS )zUserProfile.ConfigTN)r   r   r   arbitrary_types_allowedr   r   r   r   ConfigQ   s   r@   )returnc                 C   s:   | j r| jr| j  d| j S | j r*| j S | jr6| jS dS )zGet user's full name N)r   r    selfr   r   r   get_full_nameT   s    zUserProfile.get_full_namec                 C   s&   | j r| j S |  r|  S | jS dS )z%Get the name to display for this userN)r!   rE   r   rC   r   r   r   get_display_name^   s
    zUserProfile.get_display_namec                 C   s   d}d}| j r|d7 }| jr$|d7 }| jr2|d7 }| jr@|d7 }| jrN|d7 }| jr\|d7 }| jrj|d7 }| jrx|d7 }| jr|d7 }| j	r|d7 }| j
r|d7 }| jr|d7 }t|| d S )z'Calculate profile completion percentage   r      d   )r   r    r#   r*   r$   r%   r&   r'   r.   r-   r:   r!   int)rD   Ztotal_fieldsZcompleted_fieldsr   r   r   calculate_completion_percentageg   s6                z+UserProfile.calculate_completion_percentagec                    s8   |   | _| jdkrtj| _ntj| _|  I dH  dS )z$Update profile completion percentageF   N)rK   r2   r   r   r1   r   saverC   r   r   r   update_completion_percentage|   s
    


z(UserProfile.update_completion_percentagec                    s   t  | _|  I dH  dS )zUpdate last seen timestampN)r
   utcnowr8   rM   rC   r   r   r   update_last_seen   s    
zUserProfile.update_last_seenc                 C   s   | j tjkS )zCheck if profile is public)r0   r   r   rC   r   r   r   	is_public   s    zUserProfile.is_public)viewer_user_idrA   c                 C   s@   | j tjkrdS | j tjkr&|| jkS | j tjkr<|| jkS dS )z1Check if profile can be viewed by a specific userTF)r0   r   r   r   r   r   )rD   rR   r   r   r   can_be_viewed_by   s    

zUserProfile.can_be_viewed_by)r   r   r   rA   c                    s$   | |||t jd}| I dH  |S )z4Create a profile when user registers in auth service)r   r   r   r1   N)r   r   rM   )clsr   r   r   profiler   r   r   create_from_auth_user   s    z!UserProfile.create_from_auth_user);r   r   r   r   __annotations__strr   r   r    r!   r   r#   r$   r%   r   r&   r'   r)   r*   r+   dictr-   r   r.   r   r/   r   r   r0   r   r   r1   r2   rJ   r3   r4   r5   r
   rO   r6   r7   r8   r9   r   listr:   r	   r>   r@   rE   rF   rK   rN   rP   boolrQ   rS   classmethodrV   r   r   r   r   r      sV   

	r   N)beanier   r   pydanticr   r   typingr   r   r   r	   r
   r   enumr   rX   r   r   r   r   r   r   r   <module>   s   