o
    sgk                     @   s"  d dl 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	 d dl
mZmZmZmZ d dlmZ G dd	 d	eZG d
d deZG dd deZG dd deZG dd deZedkredddddddeddgddgdedd d!d"ed#d d$d"gddd%ge e d&Zee dS dS )'    N)datetime)Enum)DictListOptional)UUID)	BaseModelEmailStrField	validator)DynamoDBc                   @   s   e Zd ZU dZee ed< dZee ed< dZee ed< dZ	ee ed< dZ
ee ed< dZeee  ed< dZeee  ed< dS )	ThemeNheading_font	text_fontheading_size	text_sizelogo_backgroundbrand_colorsbrand_fonts)__name__
__module____qualname__r   r   str__annotations__r   r   r   r   r   r   r   dict r   r   '/var/www/html/XCapMarket/models/team.pyr      s   
 r   c                   @   s:   e Zd ZU eed< edddZeed< dZe	e ed< dS )Ownernamer   d   )geleownership_percentageNrole)
r   r   r   r   r   r
   r"   floatr#   r   r   r   r   r   r      s   
 r   c                       sx   e Zd ZU eed< edd dZeed< edd dZeed< dZ	eed	< dZ
eed
<  fddZG dd dZ  ZS )
TeamMemberuser_idc                   C      t  S Nr   nowr   r   r   r   <lambda>       zTeamMember.<lambda>default_factory
created_atc                   C   r'   r(   r)   r   r   r   r   r+      r,   
updated_at notes
created_byc                    s6   t  jdi |}| jd|d< | jd|d< |S )z1Override model_dump to convert datetime to string%Y-%m-%d %H:%M:%Sr/   r0   Nr   )super
model_dumpr/   strftimer0   selfargskwargsdata	__class__r   r   r6   #   s   zTeamMember.model_dumpc                   @   s   e Zd Zedd iZdS )zTeamMember.Configc                 C      |   S r(   	isoformatvr   r   r   r+   +   r,   zTeamMember.Config.<lambda>N)r   r   r   r   json_encodersr   r   r   r   Config*   s    rE   )r   r   r   r   r   r
   r/   r   r0   r2   r3   r6   rE   __classcell__r   r   r=   r   r%      s   
 r%   c                
       s  e Zd ZU eed< eed< eed< dZee ed< eed< dZee ed< dZ	ee ed< dZ
ee ed	< g Zee ed
< eedZee ed< eed< edd dZeed< edd dZeed< dZee ed< dZee ed< dd Z				d3dee dee dee dee fddZ	d4dee d	ee fddZdefddZdefdd Zd!efd"d#Zd!efd$d%Zd!ed&efd'd(Z fd)d*Z d+d, Z!e"d-d. Z#e"d/d0 Z$G d1d2 d2Z%  Z&S )5Teamidr   company_nameNcompany_urlis_franchisedescriptionlogo_urlthemeownersr-   membersr3   c                   C   r'   r(   r)   r   r   r   r   r+   :   r,   zTeam.<lambda>r/   c                   C   r'   r(   r)   r   r   r   r   r+   ;   r,   r0   stripe_customer_idclient_configc                 C   s   t  | _dS )zUpdate the modified dateN)r   r*   r0   )r9   r   r   r   update_modify@   s   zTeam.update_modifyc                 C   sD   |dur|| _ |dur|| _|dur|| _|dur|| _|   dS )zUpdate company informationN)r   rI   rJ   rL   rS   )r9   r   rI   rJ   rL   r   r   r   update_company_infoD   s   zTeam.update_company_infoc                 C   s(   |dur|| _ |dur|| _|   dS )zUpdate team brandingN)rM   rN   rS   )r9   rM   rN   r   r   r   update_brandingV   s
   zTeam.update_brandingownerc                 C   s   | j | |   dS )zAdd a new owner to the teamN)rO   appendrS   )r9   rV   r   r   r   	add_owner`   s   zTeam.add_owner
owner_namec                    s"    fdd| j D | _ |   dS )zRemove an owner from the teamc                    s   g | ]	}|j  kr|qS r   )r   ).0orY   r   r   
<listcomp>g   s    z%Team.remove_owner.<locals>.<listcomp>N)rO   rS   )r9   rY   r   r\   r   remove_ownere   s   zTeam.remove_ownerr&   c                 C   s&   || j vr| j | |   dS dS )zAdd a new team memberN)rP   rW   rS   r9   r&   r   r   r   
add_memberj      
zTeam.add_memberc                 C   s&   || j v r| j | |   dS dS )zRemove a team memberN)rP   removerS   r_   r   r   r   remove_memberp   ra   zTeam.remove_memberr#   c                 C   s   dS )zXThis method should be removed or moved elsewhere since we no longer store member detailsNr   )r9   r&   r#   r   r   r   update_member_rolev   s   zTeam.update_member_rolec                    sP   t  j|i |}| jd|d< | jd|d< |dr&t|d |d< |S )z4Override model_dump to handle datetime serializationr4   r/   r0   rH   )r5   r6   r/   r7   r0   getr   r8   r=   r   r   r6   z   s   
zTeam.model_dumpc                 C   s0   t  }|   | jddd}||jd|S )zSave team to DynamoDBTjson)exclude_unsetmoderG   )r   rS   r6   upload_to_dynamodbdynamodbTable)r9   dbr<   r   r   r   
save_to_db   s   zTeam.save_to_dbc                 C   s   t  }||j| }|S )z"Get company info from the database)r   get_itemcompany_info_table)team_idrl   company_info_datar   r   r   get_company_info   s   zTeam.get_company_infoc                 C   s   t  }||jd| }|S )zGet team by idrG   )r   rn   rj   rk   )rp   rl   	team_datar   r   r   get_team_by_id   s   zTeam.get_team_by_idc                   @   s    e Zd Zedd edd iZdS )zTeam.Configc                 C   r?   r(   r@   rB   r   r   r   r+      r,   zTeam.Config.<lambda>c                 C   s   t | S r(   )r   rB   r   r   r   r+      r,   N)r   r   r   r   r   rD   r   r   r   r   rE      s    rE   )NNNN)NN)'r   r   r   r   r   rJ   r   boolrL   rM   rN   r   rO   r   r   r
   listrP   r/   r   r0   rQ   rR   r   rS   rT   rU   rX   r^   r`   rc   rd   r6   rm   staticmethodrr   rt   rE   rF   r   r   r=   r   rG   .   s`   
 




rG   c                   @   s.   e Zd ZU eed< eed< eed< eed< dS )CreateUserRequestemail
first_name	last_namer#   N)r   r   r   r	   r   r   r   r   r   r   rx      s
   
 rx   __main__123z	Test TeamzTest Companyzhttps://www.testcompany.comFzTest descriptionz$https://www.testcompany.com/logo.pngz#000000z#FFFFFFArial	Helvetica)r   r   zJohn Doe2   CEO)r   r"   r#   zJane DoeCTO456)rH   r   rI   rJ   rK   rL   rM   rN   rO   r3   rP   r/   r0   )rer   enumr   typingr   r   r   uuidr   pydanticr   r	   r
   r   utils.dynamo_dbr   r   r   r%   rG   rx   r   r*   teamprintr   r   r   r   <module>   sD    
r