o
    6k~i                     @   s   d dl mZ ddlmZmZmZmZ G dd dejZG dd dejZ	G dd	 d	ejZ
G d
d dejZG dd dejZG dd dejZdS )    )serializers   )GovernorateCategoryAmenityPlacec                   @      e Zd ZdZG dd dZdS )GovernorateSerializerzGovernorate Serializerc                   @      e Zd ZeZg dZdS )zGovernorateSerializer.Meta)idname_arname_kuname_encodeN)__name__
__module____qualname__r   modelfields r   r   7/var/www/newdalilibackend/backend/places/serializers.pyMeta       r   Nr   r   r   __doc__r   r   r   r   r   r	          r	   c                   @   r   )CategorySerializerzCategory Serializerc                   @   r
   )zCategorySerializer.Meta)r   r   r   r   slugiconimage	is_activeN)r   r   r   r   r   r   r   r   r   r   r      r   r   Nr   r   r   r   r   r      r   r   c                   @   r   )AmenitySerializerzAmenity Serializerc                   @   r
   )zAmenitySerializer.Meta)r   r   r   r   r   N)r   r   r   r   r   r   r   r   r   r   r      r   r   Nr   r   r   r   r   r!      r   r!   c                   @   s8   e Zd ZdZeddZe ZG dd dZ	dd Z
dS )	PlaceListSerializerz&Place List Serializer (for list views)T	read_onlyc                   @   r
   )zPlaceListSerializer.Meta)r   namer   categoryr   addresslatitude	longituderatingreviews_countis_openhas_bookingdistance_kmNr   r   r   r   r   r   r   r   r   r   r      r   r   c              	   C   s   | j d}|rB|jd}|jd}|rB|rBzddlm} |t|t|t|jt|j}t|dW S  t	t
fyA   Y d S w d S )Nrequestlatlngr   )calculate_distance   )contextgetquery_paramsutilsr3   floatr(   r)   round
ValueError	TypeError)selfobjr0   r1   r2   r3   distancer   r   r   get_distance_km$   s    z#PlaceListSerializer.get_distance_kmN)r   r   r   r   r   r&   r   SerializerMethodFieldr.   r   r@   r   r   r   r   r"      s    
r"   c                   @   sN   e Zd ZdZeddZeddZedddZ	e
 ZG dd dZdd Zd	S )
PlaceDetailSerializerz*Place Detail Serializer (for detail views)Tr#   )manyr$   c                   @   s    e Zd ZeZg dZg dZdS )zPlaceDetailSerializer.Meta)r   r%   r   r&   governoratedescriptionr'   r(   r)   phonewebsiteemailr   galleryworking_hours	amenitiesprice_ranger,   r-   r*   r+   is_verifiedis_favorite
created_at)r*   r+   rM   rO   N)r   r   r   r   r   r   read_only_fieldsr   r   r   r   r   >   s    r   c                 C   s0   | j d}|r|jjr|jj|jd S dS )Nr0   )userF)r5   r6   rQ   is_authenticatedfavorited_byfilterexists)r=   r>   r0   r   r   r   get_is_favoriteF   s   z%PlaceDetailSerializer.get_is_favoriteN)r   r   r   r   r   r&   r	   rD   r!   rK   r   rA   rN   r   rV   r   r   r   r   rB   7   s    

rB   c                       s.   e Zd ZdZG dd dZ fddZ  ZS )PlaceCreateUpdateSerializerzPlace Create/Update Serializerc                   @   r
   )z PlaceCreateUpdateSerializer.Meta)r%   r&   rD   rE   r'   r(   r)   rF   rG   rH   r   rI   rJ   rK   rL   r,   r-   Nr/   r   r   r   r   r   O   r   r   c                    s   | j d j|d< t |S )Nr0   owner)r5   rQ   supercreate)r=   validated_data	__class__r   r   rZ   U   s   z"PlaceCreateUpdateSerializer.create)r   r   r   r   r   rZ   __classcell__r   r   r\   r   rW   M   s    rW   N)rest_frameworkr   modelsr   r   r   r   ModelSerializerr	   r   r!   r"   rB   rW   r   r   r   r   <module>   s    