o
    2hO                     @   sl   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jZG d	d
 d
ejZG dd dejZ	dS )    )serializers   )ContactFormNc                   @   sN   e Zd ZdZG dd dZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )ContactFormSerializerz0Serializer for ContactForm model with validationc                   @   s    e Zd ZeZg dZg dZdS )z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 r   r   (/var/www/apihucms/contact/serializers.pyMeta	   s    r   c                 C   sV   |r
t | dk rtdt |dkrtdtd|s%td|  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valuer   r   r   validate_name   s   


z#ContactFormSerializer.validate_namec                 C   s4   |st dd}t||st d|  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_patternr   r   r   validate_email&   s   

z$ContactFormSerializer.validate_emailc                 C   s|   |r<t dd|}t|dk rtdt|dkrtdd}t ||r+| S d}t ||r7| S t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_patternr   r   r   validate_phone2   s   


z$ContactFormSerializer.validate_phonec                 C   s@   |st ddd tjD }||vrt dd| |S )zValidate subject fieldzSubject is required.c                 S      g | ]}|d  qS r   r   .0choicer   r   r   
<listcomp>Q       z:ContactFormSerializer.validate_subject.<locals>.<listcomp>zSubject must be one of: , )r   r   r   SUBJECT_CHOICESjoin)r!   r"   valid_subjectsr   r   r   validate_subjectL   s   
z&ContactFormSerializer.validate_subjectc                 C   s<   |r
t | dk rtdt |dkrtd| S )zValidate message fieldr(   z,Message must be at least 10 characters long.i  z&Message cannot exceed 5000 characters.)r   r   r   r   r    r   r   r   validate_messageW   s
   

z&ContactFormSerializer.validate_messagec                 C   s   t jjdi |S )z$Create a new contact form submissionNr   )r   objectscreate)r!   validated_datar   r   r   r=   a   s   zContactFormSerializer.createN)r   r   r   __doc__r   r#   r&   r.   r:   r;   r=   r   r   r   r   r      s    
r   c                   @   sF   e Zd ZdZejdddZejdddZejddZ	G dd dZ
d	S )
ContactFormListSerializerz;Simplified serializer for listing contact forms (admin use)get_subject_displayTsource	read_onlyget_status_displayrD   c                   @      e Zd ZeZg dZdS )zContactFormListSerializer.Meta)
r   r   r   r
   subject_displayr   status_display	is_recentr   r   Nr   r   r   r   r   r   r   r   r   r   r   m       r   N)r   r   r   r?   r   	CharFieldrH   rI   BooleanFieldrJ   r   r   r   r   r   r@   f   s    r@   c                   @   sT   e Zd ZdZejdddZejdddZejddZ	ejdddZ
G dd	 d	Zd
S )ContactFormDetailSerializerz;Detailed serializer for individual contact form (admin use)rA   TrB   rE   rF   get_status_colorc                   @   rG   )z ContactFormDetailSerializer.Meta)r   r   r   r	   r
   rH   r   r   rI   status_coloradmin_notesresponded_atresponded_byrJ   r   r   NrK   r   r   r   r   r      rL   r   N)r   r   r   r?   r   rM   rH   rI   rN   rJ   rQ   r   r   r   r   r   rO   }   s    rO   c                   @   s&   e Zd ZdZG dd dZdd ZdS )!ContactFormStatusUpdateSerializerz7Serializer for updating contact form status (admin use)c                   @   rG   )z&ContactFormStatusUpdateSerializer.Meta)r   rR   rT   NrK   r   r   r   r   r      rL   r   c                 C   s2   dd t jD }||vrtdd| |S )zValidate status fieldc                 S   r/   r0   r   r1   r   r   r   r4      r5   zEContactFormStatusUpdateSerializer.validate_status.<locals>.<listcomp>zStatus must be one of: r6   )r   STATUS_CHOICESr   r   r8   )r!   r"   valid_statusesr   r   r   validate_status   s   z1ContactFormStatusUpdateSerializer.validate_statusN)r   r   r   r?   r   rX   r   r   r   r   rU      s    rU   )
rest_frameworkr   modelsr   r   ModelSerializerr   r@   rO   rU   r   r   r   r   <module>   s    `