o
    h                     @   s  d dl mZmZmZmZmZmZ d dlmZ d dl	m
Z
mZ d dlZd dlmZ ddlmZmZmZmZmZmZmZ ddlmZmZ dd	lmZ dd
lmZmZmZm Z m!Z!m"Z"m#Z# e Z$e$j%dedeej&fdededej'fddZ(e$%deej&fdededej'fddZ)e$%deej&eefdededej'defddZ*e$j+dedd ddddeej&eedddf
de,de,dee- dee- d ee- dej'ded!ee- d"ee- d#ee, fd$d%Z.e$j+d&edd dddeej&eefde,de,dee- d'ee/ dej'defd(d%Z.e$j+d)edeej&fd*e-dej'fd+d,Z0e$j1d)edeej&fd*e-d-edej'fd.d/Z2e$j3d)eded0d1d2eej&fd*e-dej'fd3d4Z4e$%d5eej&fd6edej'fd7d8Z5dS )9    )	APIRouterDependsHTTPExceptionBackgroundTasksPathRequest)JSONResponse)ListOptionalN)database   )UserUserBase	UserLogin
UserUpdateUserResponseListEmailActionResetPasswordRequest)create_access_tokenget_current_userdetails)str_to_objectid)create_user_servicesend_email_verification_serviceget_users_serviceread_user_serviceupdate_user_servicedelete_user_servicereset_password_service/)response_modeluserbackground_tasksdbc              
   C   sH   t | ||}td|d dd}|jdd|d  dd	d	d
ddd |S )z
    Creates a new user after verifying email code and then sends a welcome email.
    Returns a JSONResponse with a secure JWT set as a cookie.
    zUser created successfully	user_data)messager    )contentAuthorizationzBearer tokenTi  r   None)keyvaluehttponlymax_ageexpirespathsecuresamesite)r   r   
set_cookie)r    r!   r"   resultresponse r4   5/var/www/html/moveengine/app/v1/routers/saas/users.pycreate_user_endpoint   s   
r6   z/emailverification/email_actionc                 C   s   t | ||S z]
    Sends a verification code via email for signup, forgot password, or invite actions.
    r   )r7   r!   r"   r4   r4   r5   send_email_verification5   s   
r:   z/invite/current_userc                 C   s   t | |||S r8   r9   )r7   r!   r"   r;   r4   r4   r5   send_inviteB   s   
r<   z/list/
   skiplimitqstatusreferred_account_idcreated_date_fromcreated_date_torolec
                 C   s&   | d}
t|
| |||||||||	S )8
    Returns a list of users for the given account.
    
account_id)getr   )r>   r?   r@   rA   rB   r"   r;   rC   rD   rE   rG   r4   r4   r5   	get_usersN   s   
rI   z
/list/all/	is_activec                 C   s   d}t || |||||S )rF   all)r   )r>   r?   r@   rJ   r"   r;   rG   r4   r4   r5   rI   b   s   z
/{user_id}user_idc                 C   "   t | |}|du rtddd|S )z*
    Returns user details by user ID.
    N  User not foundstatus_codedetail)r   r   rL   r"   r    r4   r4   r5   	read_userr      
rT   r#   c                 C   s$   t | ||}|du rtddd|S )z#
    Updates user information.
    NrN   zUser not found after updaterP   )r   r   )rL   r#   r"   updated_userr4   r4   r5   update_user   s   	rW   .zThe ID of the user)descriptionc                 C   rM   )z
    Deletes a user by ID.
    NrN   rO   rP   )r   r   rS   r4   r4   r5   delete_user   rU   rY   z/reset-password/request_bodyc                 C   s
   t | |S )zE
    Resets a user's password after verifying the provided code.
    )r   )rZ   r"   r4   r4   r5   reset_password   s   
r[   )6fastapir   r   r   r   r   r   fastapi.responsesr   typingr	   r
   jsonapp.dbr   models.saas.usersmodelr   r   r   r   r   r   r   dependencies.authr   r   libraries.objectr   services.saas.usersr   r   r   r   r   r   r   routerpostget_mongo_dbMongoDBr6   r:   r<   rH   intstrrI   boolrT   putrW   deleterY   r[   r4   r4   r4   r5   <module>   s     $$
	

