o
    2hm!                     @   s   d dl mZ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mZ d dlmZ dd	lmZ dd
lmZmZmZmZ d dlZee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!edgdd Z"edgdd Z#dS )    )genericsstatus)Response)api_view)AllowAny)timezone)	send_mail)settings   )ContactForm)ContactFormSerializerContactFormListSerializerContactFormDetailSerializer!ContactFormStatusUpdateSerializerNc                   @   s4   e Zd ZdZej ZeZ	e
gZdd Zdd ZdS )ContactFormCreateViewz_
    POST API for creating new contact form submissions
    Endpoint: /api/contact/submit/
    c              
   O   s   | j |jd}| rP| }z| | W n ty2 } ztdt|  W Y d}~nd}~ww t	dd|j
|j| |j d|j
ddd	tjd
S t	dd|jdtjd
S )zHandle contact form submissiondataz#Failed to send admin notification: NTzKYour message has been submitted successfully! We will get back to you soon.REF06d)idnamesubjectsubmitted_atreference_numbersuccessmessager   r   Fz Please correct the errors below.r   r   errors)get_serializerr   is_validsavesend_admin_notification	Exceptionloggererrorstrr   r   r   get_subject_display
created_at	isoformatr   HTTP_201_CREATEDr   HTTP_400_BAD_REQUEST)selfrequestargskwargs
serializercontact_forme r4   "/var/www/apihucms/contact/views.pycreate   s8    
zContactFormCreateView.createc                 C   s   d|   }d|j d|j d|jpd d|   d|j d|jd	 d
|jdd}tt	dd}|rEt
||tt	dd|gdd dS dS )zBSend email notification to admin about new contact form submissionzNew Contact Form Submission - zE
        New Contact Form Submission Received
        
        Name: z
        Email: z
        Phone: zNot providedz
        Subject: z#
        
        Message:
        z
        
        Submitted: z%Y-%m-%d %H:%M:%Sz
        Reference: REFr   zW
        
        Please log in to the admin panel to respond to this inquiry.
        ADMIN_EMAILNDEFAULT_FROM_EMAILznoreply@example.comT)r   r   
from_emailrecipient_listfail_silently)r(   r   emailphoner   r)   strftimer   getattrr	   r   )r-   r2   r   r   admin_emailr4   r4   r5   r#   ?   s4   	



z-ContactFormCreateView.send_admin_notificationN)__name__
__module____qualname____doc__r   objectsallquerysetr   serializer_classr   permission_classesr6   r#   r4   r4   r4   r5   r      s    
"r   c                   @   &   e Zd ZdZej ZeZ	dd Z
dS )ContactFormListViewzc
    GET API for listing contact form submissions (admin use)
    Endpoint: /api/contact/list/
    c                 C   s   t j }| jjdd}|r|j|d}| jjdd}|r%|j|d}| jjdd}|dkrFdd	lm} t	
 |d
d }|j|d}|S )z.Filter contact forms based on query parametersr   Nr   r   )r   recenttruer   	timedelta   dayscreated_at__gte)r   rE   rF   r.   query_paramsgetfilterdatetimerO   r   now)r-   rG   status_filtersubject_filterrL   rO   week_agor4   r4   r5   get_queryseti   s   
z ContactFormListView.get_querysetN)rA   rB   rC   rD   r   rE   rF   rG   r   rH   r]   r4   r4   r4   r5   rK   `   
    
rK   c                   @   s   e Zd ZdZej ZeZ	dS )ContactFormDetailViewzb
    GET API for individual contact form details (admin use)
    Endpoint: /api/contact/<id>/
    N)
rA   rB   rC   rD   r   rE   rF   rG   r   rH   r4   r4   r4   r5   r_      s    
r_   c                   @   rJ   )ContactFormUpdateStatusViewzo
    PATCH API for updating contact form status (admin use)
    Endpoint: /api/contact/<id>/update-status/
    c                 O   sv   |   }| j||jdd}| r/|jddkr t |jd< |  t	ddt
|jdS t	dd	|jd
tjdS )z)Update contact form status with timestampT)r   partialr   resolvedresponded_atzStatus updated successfully.r   FzFailed to update status.r   r   )
get_objectr    r   r!   validated_datarV   r   rY   r"   r   r   r   r   r,   )r-   r.   r/   r0   instancer1   r4   r4   r5   patch   s$   z!ContactFormUpdateStatusView.patchN)rA   rB   rC   rD   r   rE   rF   rG   r   rH   rg   r4   r4   r4   r5   r`      r^   r`   GETc                 C   s   ddl m} ddlm} tj }tjdj|dd}dd |D }tjdj|dd}d	d |D }t	
 |d
d }tjj|d }	tjjdd }
t||	|
||t	
  dS )z[
    GET API for contact form statistics (admin use)
    Endpoint: /api/contact/stats/
    r   )CountrN   r   )countc                 S      i | ]	}|d  |d qS )r   rj   r4   .0itemr4   r4   r5   
<dictcomp>       z&contact_form_stats.<locals>.<dictcomp>r   c                 S   rk   )r   rj   r4   rl   r4   r4   r5   ro      rp      rQ   rS   pendingr   )total_submissionsrecent_submissions_30_dayspending_submissionsstatus_breakdownsubject_breakdownlast_updated)django.db.modelsri   rX   rO   r   rE   rj   valuesannotater   rY   rW   r   r*   )r.   ri   rO   rs   status_countsrv   subject_countsrw   thirty_days_agorecent_submissionspending_countr4   r4   r5   contact_form_stats   s$   

r   POSTc                 C   sb   dddddd}t |d}| r%| }tdd	|jt |jd
tjdS tdd|jdtj	dS )zZ
    POST API for testing contact form functionality
    Endpoint: /api/contact/test/
    z	Test Userztest@example.comz+91 9876543210	admissionzJThis is a test message to verify the contact form API is working properly.)r   r<   r=   r   r   r   Tz'Test contact form created successfully!)r   r   test_idr   r   FzTest failedr   )
r   r!   r"   r   r   r   r   r+   r   r,   )r.   	test_datar1   r2   r4   r4   r5   test_contact_form   s0   
r   )$rest_frameworkr   r   rest_framework.responser   rest_framework.decoratorsr   rest_framework.permissionsr   django.utilsr   django.core.mailr   django.confr	   modelsr   serializersr   r   r   r   logging	getLoggerrA   r%   CreateAPIViewr   ListAPIViewrK   RetrieveAPIViewr_   UpdateAPIViewr`   r   r   r4   r4   r4   r5   <module>   s&    
L!
"
$