
    2hO                         d dl mZ ddlmZ d dlZ G d dej
                        Z G d dej
                        Z G d	 d
ej
                        Z G d dej
                        Z	y)    )serializers   )ContactFormNc                   H    e Zd ZdZ G d d      Zd Zd Zd Zd Zd Z	d	 Z
y
)ContactFormSerializerz0Serializer for ContactForm model with validationc                        e Zd ZeZg dZg dZy)ContactFormSerializer.Meta)	idnameemailphonesubjectmessagestatus
created_at
updated_at)r
   r   r   r   N)__name__
__module____qualname__r   modelfieldsread_only_fields     (/var/www/apihucms/contact/serializers.pyMetar	   	   s    

 Hr   r   c                 @   |rt        |j                               dk  rt        j                  d      t        |      dkD  rt        j                  d      t	        j
                  d|      st        j                  d      |j                         j                         S )zValidate name field   z(Name must be at least 2 characters long.   z"Name cannot exceed 255 characters.z^[a-zA-Z\s\-'\.]+$z@Name can only contain letters, spaces, hyphens, and apostrophes.)lenstripr   ValidationErrorrematchtitleselfvalues     r   validate_namez#ContactFormSerializer.validate_name   s    EKKM*Q.--.XYYu:--.RSS xx-u5--.pqq{{}""$$r   c                     |st        j                  d      d}t        j                  ||      st        j                  d      |j	                         j                         S )zValidate email fieldzEmail address is required.z0^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$z#Please enter a valid email address.)r   r"   r#   r$   lowerr!   )r'   r(   email_patterns      r   validate_emailz$ContactFormSerializer.validate_email&   sT    --.JKK Lxxu---.STT{{}""$$r   c                    |rt        j                  dd|      }t        |      dk  rt        j                  d      t        |      dkD  rt        j                  d      d}t        j
                  ||      r|j                         S d}t        j
                  ||      r|j                         S t        j                  d	      |S )
zValidate phone field (optional)z\D 
   z-Phone number must be at least 10 digits long.   z%Phone number cannot exceed 15 digits.z^(\+91|91|0)?[6-9]\d{9}$z^\+?[1-9]\d{9,14}$z"Please enter a valid phone number.)r#   subr    r   r"   r$   r!   )r'   r(   digits_onlyindian_patterninternational_patterns        r   validate_phonez$ContactFormSerializer.validate_phone2   s    &&E2K;"$!112abb;"$!112YZZ 9Nxx4{{}$ %:!xx-{;{{}$--.RSSr   c                     |st        j                  d      t        j                  D cg c]  }|d   	 }}||vr't        j                  ddj	                  |             |S c c}w )zValidate subject fieldzSubject is required.r   zSubject must be one of: , )r   r"   r   SUBJECT_CHOICESjoin)r'   r(   choicevalid_subjectss       r   validate_subjectz&ContactFormSerializer.validate_subjectL   sk    --.DEE2=2M2MN&)NN&--0HSaIbHc.dee	 Os   A%c                     |rt        |j                               dk  rt        j                  d      t        |      dkD  rt        j                  d      |j                         S )zValidate message fieldr0   z,Message must be at least 10 characters long.i  z&Message cannot exceed 5000 characters.)r    r!   r   r"   r&   s     r   validate_messagez&ContactFormSerializer.validate_messageW   sS    EKKM*R/--.\]]u:--.VWW{{}r   c                 @    t        j                  j                  di |S )z$Create a new contact form submissionr   )r   objectscreate)r'   validated_datas     r   rB   zContactFormSerializer.createa   s    ""));N;;r   N)r   r   r   __doc__r   r)   r-   r6   r=   r?   rB   r   r   r   r   r      s/    :H H%
%4	<r   r   c                       e Zd ZdZ ej
                  dd      Z ej
                  dd      Z ej                  d      Z	 G d d      Z
y	)
ContactFormListSerializerz;Simplified serializer for listing contact forms (admin use)get_subject_displayTsource	read_onlyget_status_displayrJ   c                       e Zd ZeZg dZy)ContactFormListSerializer.Meta)
r
   r   r   r   subject_displayr   status_display	is_recentr   r   Nr   r   r   r   r   r   r   r   r   r   rN   m   s    
r   r   N)r   r   r   rD   r   	CharFieldrO   rP   BooleanFieldrQ   r   r   r   r   rF   rF   f   sM    E+k++3HTXYO*[**2FRVWN(((48I
 
r   rF   c                       e Zd ZdZ ej
                  dd      Z ej
                  dd      Z ej                  d      Z	 ej
                  dd      Z
 G d d	      Zy
)ContactFormDetailSerializerz;Detailed serializer for individual contact form (admin use)rG   TrH   rK   rL   get_status_colorc                       e Zd ZeZg dZy) ContactFormDetailSerializer.Meta)r
   r   r   r   r   rO   r   r   rP   status_coloradmin_notesresponded_atresponded_byrQ   r   r   NrR   r   r   r   r   rY      s    
r   r   N)r   r   r   rD   r   rS   rO   rP   rT   rQ   rZ   r   r   r   r   rV   rV   }   sb    E+k++3HTXYO*[**2FRVWN(((48I(;((0BdSL
 
r   rV   c                   *    e Zd ZdZ G d d      Zd Zy)!ContactFormStatusUpdateSerializerz7Serializer for updating contact form status (admin use)c                       e Zd ZeZg dZy)&ContactFormStatusUpdateSerializer.Meta)r   r[   r]   NrR   r   r   r   r   ra      s    :r   r   c                     t         j                  D cg c]  }|d   	 }}||vr't        j                  ddj	                  |             |S c c}w )zValidate status fieldr   zStatus must be one of: r8   )r   STATUS_CHOICESr   r"   r:   )r'   r(   r;   valid_statusess       r   validate_statusz1ContactFormStatusUpdateSerializer.validate_status   sV    2=2L2LM&)MM&--0G		R`HaGb.cdd	 Ns   AN)r   r   r   rD   r   re   r   r   r   r_   r_      s    A; ;r   r_   )
rest_frameworkr   modelsr   r#   ModelSerializerr   rF   rV   r_   r   r   r   <module>ri      sY    &  	]<K77 ]<@
 ; ; 
.
+"="= 
<(C(C r   