o
    V
h                     @   s  d dl mZmZmZmZmZmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZmZ d dlmZ ddlmZ ddlmZmZmZ dd	lmZmZmZmZmZ e Zh d
Zej dedeej!eefdedej"fddZ#ej$de	e dedddeddded d dedddeej!eefde%dee% de&de&dej"f
ddZ'ej$dededd deej!eefd!e%dej"fd"d#Z(ej)dedeej!eefd!e%d$edej"fd%d&Z*ej+dededd deej!eefd!e%dej"fd'd(Z,dS ))    )	APIRouterDependsHTTPExceptionQueryPathBody)OptionalListDictAny)datetime)	BaseModelField)database   )get_current_userdetails)SupportActivitySupportActivityCreateSupportActivityUpdate) create_customer_activity_service list_customer_activities_serviceget_customer_activity_service update_customer_activity_service delete_customer_activity_service>   ticketsupport_requestsubscription_request/)response_modelactivitydbc              
      s   | j tvrtddd| js| jd|did} | jd|did} zt| |I dH }|W S  tyG } ztd	d
t| dd}~ww )z
    Create a new customer support activity (e.g. a ticket or support request).
    Only allowed activity types (ticket, support_request, subscription_request) can be created.
    The current user's account_id is used if not provided.
    i  z.Activity type not allowed for customer supportstatus_codedetail
account_id)updateuser_id_idN  z$Failed to create customer activity: )	typeALLOWED_CUSTOMER_TYPESr   r$   copygetr   	Exceptionstr)r   r    current_usernew_activitye r2   ?/var/www/html/moveengine/app/v1/routers/saas/supportcustomer.pycreate_customer_activity   s   
r4   .z0Account ID to filter customer support activities)descriptionNz(Optional filter by allowed activity type)ge
      r$   activity_typeskiplimitc              
      sN   zt | ||||I dH }|W S  ty& } ztddt| dd}~ww )z
    Retrieve a paginated list of customer support activities for an account.
    Only returns records with allowed types.
    Nr(   z$Failed to list customer activities: r!   )r   r-   r   r.   )r$   r9   r:   r;   r    r/   
activitiesr1   r2   r2   r3   list_customer_activities-   s   r=   z/{activity_id}zCustomer support activity IDactivity_idc              
      x   z#t | |I dH }|stddd|d|dkr"tddd|W S  ty; } ztdd	t| dd}~ww )
zB
    Retrieve details for a single customer support activity.
    N  Activity not foundr!   r$     z$Not authorized to view this activityr(   zFailed to retrieve activity: )r   r   r,   r-   r.   )r>   r    r/   r   r1   r2   r2   r3   get_customer_activity@      	rC   activity_updatec              
      sz   z$t | ||I dH }|stddd|d|dkr#tddd|W S  ty< } ztdd	t| dd}~ww )
z
    Update an existing customer support activity.
    Only activities created by the customer (i.e. with allowed types) can be updated.
    Nr@   rA   r!   r$   rB   z&Not authorized to update this activityr(   zFailed to update activity: )r   r   r,   r-   r.   )r>   rE   r    r/   updatedr1   r2   r2   r3   update_customer_activityT   s   rG   c              
      r?   )
z-
    Delete a customer support activity.
    Nr@   rA   r!   r$   rB   z&Not authorized to delete this activityr(   zFailed to delete activity: )r   r   r,   r-   r.   )r>   r    r/   deletedr1   r2   r2   r3   delete_customer_activityj   rD   rI   )-fastapir   r   r   r   r   r   typingr   r	   r
   r   r   pydanticr   r   app.dbr   dependencies.authr   models.saas.supportmodelr   r   r   services.saas.supportcustomerr   r   r   r   r   routerr*   postget_mongo_dbMongoDBr4   r,   r.   intr=   rC   putrG   deleterI   r2   r2   r2   r3   <module>   s     





