o
    g8"                     @   s0  d dl Z d dlZd dlmZmZ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mZmZ d dlmZ d dlmZmZmZmZ d dlmZmZ 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) e
ddgdZ*ededededededededededf
de+de+de+dee+ de,dee+ dee+ dee deee  dee+ fddZ-eeee-f Z.e*j/ded d!e.d"efd#d$Z0e*/d%edfd&efd'd(Z1e*j2d)ed de+fd*d+Z3e*j/d,ej4d-d.ede+d"efd/d0Z5e*j2d1ee d de+fd2d3Z6dS )4    N)	AnnotatedDictListOptional)uuid4)		APIRouterBodyDependsFileHeaderHTTPExceptionRequest
UploadFilestatus)JSONResponse)CreateUserRequestOwnerTeamTheme)AccountTypeUserBase)create_user_cognito_poolvalidate_jwt_token)TeamService)UserService)generate_secure_password)ClientConfig)S3BucketStoragez/teamsteams)prefixtags.Fnamecompany_name
created_bycompany_urlis_franchisedescriptionlogo_urlthemeownersteam_idc
                    s>   t d}
|
 }t|	| |||||||r|ng |g |d}|S )z0Create a team class with the provided parametersdefault)idr!   r"   r$   r%   r&   r'   r(   r)   r#   membersclient_config)r   get_default_dictr   )r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r.   default_configteam r2   3/var/www/html/XCapMarket/controllers/team_router.pycreate_team_class   s$   
r4   /)response_modelr1   requestc              
      s  zq|j j}t }| jrO|t| j}|sttjdd| j	|_	| j
|_
| j|_| j|_| j|_| j|_| j|_| j|_| j|_|j|jd |  |W S tt | _t|  t }|j|j| jd | j|jd |   | W S  ty } ztddt| dd}~ww )zGCreate a new team or update existing team with the provided informationTeam not foundstatus_codedetailuser_id)r=   r*   i  zFailed to create team: N)statecurrent_userr   r,   get_team_by_idstrr   r   HTTP_404_NOT_FOUNDr!   r"   r$   r%   r&   r'   r(   r)   r.   
add_memberr=   
save_to_dbr   printr   update_user_teamemail	Exception)r1   r7   r?   team_serviceexisting_teamuser_serviceer2   r2   r3   create_teamC   sB   rM   z/logo/uploadfilec           
   
      s(  zm| j dsttjdd| jdd  }|dvr$ttjdddt  d| }t	j
d	 }zt|d
}|  I dH }|j||d W n tya } zdt|v r\ttjdd d}~ww |j}tdd|ddW S  ty| } z|d}~w ty }	 zttjdt|	 dd}	~	ww )z'Upload a team logo before team creationzimage/zFile must be an imager9   .)jpgjpegpnggifsvgz3Only jpg, jpeg, png, gif, and svg files are allowedzteam-logos/xcap_s3_storage)bucket_nameN)s3_file_paths3_fileExpiredTokenz.S3 credentials have expired. Please try again.   zLogo uploaded successfully)messager'   r:   contentzFailed to upload logo: )content_type
startswithr   r   HTTP_400_BAD_REQUESTfilenamesplitlowerr   osenvironr   readupload_file_to_s3_bucketrH   rA   HTTP_401_UNAUTHORIZEDs3_file_locationr   HTTP_500_INTERNAL_SERVER_ERROR)
rN   file_extrX   rV   
s3_storagefile_contents3_errors3_urlhttp_exrL   r2   r2   r3   upload_team_logov   sX   


	rr   z
/{team_id}c              
      sv   zt  }|| }|sttjdd|W S  ty# } z|d}~w ty: } zttjdt| dd}~ww )zGet team details by team IDr8   r9   NzFailed to get team details: )r   r@   r   r   rB   rH   rk   rA   )r*   rI   r1   rq   rL   r2   r2   r3   get_team_details   s&   
rs   z/{team_id}/member)r:   	user_datac                    s
  z^|j j}t }t| |I dH }t }t }t|d|d|d|d|d|j| j	t
j
 |d	}|| ||}	|	sKttjdd|	j|jd	 |	  ttjd
didW S  tym }
 z|
d}
~
w ty } zttjdt| dd}~ww )zNCreate a new user in both Cognito and the user table, and add them to the teamNrG   username
first_name	last_name)	r=   ru   rG   rv   rw   r#   account_type
created_atr*   r8   r9   r<   r\   z+User created successfully and added to teamr]   zFailed to create user: )r>   r?   r   r   r   r   r   getr=   roledatetimeutcnow	save_userr@   r   r   rB   rC   rG   rD   r   HTTP_201_CREATEDrH   rk   rA   )rt   r*   r7   r?   temp_passwordcognito_responserK   rI   new_userr1   rq   rL   r2   r2   r3   create_user   sR   

r   z/{team_id}/membersc              
      s   z!t  }|| }|sttjddt }t|j}||}|W S  ty0 } z|d}~w t	yG } zttj
dt| dd}~ww )z$Get all members of a team by team IDr8   r9   NzFailed to get team members: )r   r@   r   r   rB   r   listr-   get_active_users_by_idsrH   rk   rA   )r*   rI   r1   rK   
member_idsteam_membersrq   rL   r2   r2   r3   get_team_members   s,   


r   )7r|   re   typingr   r   r   r   uuidr   fastapir   r   r	   r
   r   r   r   r   r   fastapi.responsesr   models.teamr   r   r   r   models.userr   r   services.auth_servicer   r   services.team_servicesr   services.user_servicer   
utils.authr   utils.client_checkr   utils.s3_storager   r1   rA   boolr4   TeamDependencypostrM   rr   rz   rs   r   r   r   r2   r2   r2   r3   <module>   s    ,
	

!255