o
    V
h                     @   s>  d dl m Z mZ d dlmZ d dlmZ ddlmZmZ ddl	m
Z
 d dlmZmZ d dlZeeZd	Zd
edejdefddZdedee dededejdee fddZdedejdee fddZdededejdee fddZdedejdee fddZdedejdefddZdededejdefd d!ZdS )"    )datetime	timedelta)
Collection)database   )SupportActivityCreateSupportActivityUpdate)str_to_objectid)OptionalListNsupport_activitiesactivitydbreturnc              
      s   z+|t  }|  }t |d< ||}t|j|d< |d |d< td|d  |W S  t	y? } zt
d|  d}~ww )zO
    Insert a new support activity into the support_activities collection.
    created_date_idactivity_idzCreated activity %szError creating activity: %sN)COLLECTION_NAMEdictr   utcnow
insert_onestrinserted_idloggerinfo	Exceptionerror)r   r   activities_collectionactivity_dataresulte r!   8/var/www/html/moveengine/app/v1/services/saas/support.pycreate_activity_service   s   
r#   
account_idtype_filterskiplimitc              
      s   z?|t  }d| i}|r||d< ||||dd}g }|2 z3 dH W }	t|	d |	d< |	d |	d< ||	 q#6 |W S  tyS }
 zt	d|
  d}
~
ww )	z|
    Retrieve a paginated list of support activities for the specified account.
    Optionally filter by activity type.
    r$   typer   Nr   r   zError listing activities: %s)
r   findr&   r'   sortr   appendr   r   r   )r$   r%   r&   r'   r   r   querycursor
activitiesdocr    r!   r!   r"   list_activities_service   s&   r1   r   c              
      sl   z |t  }|dt| i}|rt|d |d< |d |d< |W S  ty5 } ztd| |  d}~ww )z7
    Retrieve a single support activity by its ID.
    r   r   z Error retrieving activity %s: %sN)r   find_oner	   r   r   r   r   r   r   r   r   r    r!   r!   r"   get_activity_service3   s   r4   activity_updatec              
      s   z:|t  }|jdd}|dt| id|i}|jdkr W dS |dt| i}|r9t|d |d< |d |d< |W S  tyO } zt	d| |  d}~ww )	z.
    Update an existing support activity.
    T)exclude_unsetr   $setr   Nr   zError updating activity %s: %s)
r   r   
update_oner	   matched_countr2   r   r   r   r   )r   r5   r   r   update_datar   r   r    r!   r!   r"   update_activity_serviceB   s"   
r;   c              
      s   z,|t  }|dt| i}|sW dS |dt| i t|d |d< |d |d< |W S  tyA } ztd| |  d}~ww )zB
    Delete a support activity and return the deleted record.
    r   Nr   zError deleting activity %s: %s)r   r2   r	   
delete_oner   r   r   r   r3   r!   r!   r"   delete_activity_serviceU   s   r=   c           
   
      s   z;|t  }|| dddgid}t }|| dd|id}d}|2 z
3 d	H W }|d
7 }q%6 ||d	| d}|W S  tyO }	 ztd|	  d	}	~	ww )a3  
    Aggregate support metrics for an account:
      - Total count of support activities (of type 'comment' or 'note')
      - Count of upcoming meetings (activity type 'meeting' with scheduled date in additional_data)
      - For pipeline, the latest update might be shown elsewhere (here set as None)
    z$incommentnote)r$   r(   meetingz$gte)r$   r(   zadditional_data.scheduled_dater   N   )comments_countupcoming_meetings_counttrial_days_remaininglast_updatedz'Error aggregating dashboard metrics: %s)	r   count_documentsr   r   r*   	isoformatr   r   r   )
r$   r   r   rB   nowmeetings_cursormeetings_count_	dashboardr    r!   r!   r"   get_support_dashboard_servicef   s8   

rM   
new_statusc           
   
      s   zW|d }| dt| i}|std|dd}|dt| id|t di d| d	d
| d| ||dt d}|t }||}t	|j
|d< |d |d< |W S  tyl }	 ztd| |	  d	}	~	ww )z
    Update the sales pipeline status for an account.
    This function does two things:
      1. Updates the account record in the 'accounts' collection.
      2. Inserts a support activity record of type 'pipeline_update' to log the change.
    accountsr   zAccount not foundsales_pipeline_statusunknownr7   )rP   updated_datepipeline_updateNzPipeline status changed from z to )
old_statusrN   )r(   r$   user_idcontentadditional_datar   r   z1Error updating pipeline status for account %s: %s)r2   r	   
ValueErrorgetr8   r   r   r   r   r   r   r   r   r   )
r$   rN   r   accounts_collectionaccountrT   r   r   r   r    r!   r!   r"   update_pipeline_status_service   s8   

r\   )r   r   pymongo.collectionr   app.dbr   models.saas.supportmodelr   r   libraries.objectr	   typingr
   r   logging	getLogger__name__r   r   MongoDBr   r#   r   intr1   r4   r;   r=   rM   r\   r!   r!   r!   r"   <module>   s     
,  "