o
    iF                     @   s8  d dl Z d dl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 d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ ejddddZejddddZejddddZee ee ejddde	jeedddfdefddZejddde	jedd Z ejddde	jeejdddddfdefd dZ!ejd!d"de	jeejdd#d$d%dejdddd&dejd'd(d)d*dfd+eded,e"fd-d.Z#ejd/d0de	jeejdddd1dfdefd2d3Z$ejd4d5de	jeejdddd1dfdefd6d7Z%ejdd8de	jeejdddd9dfdefd:d;Z&ejd<d=de	jeejdddd>dfdefd?d@Z'ejdAdBde	jeej(dCdDdej(dCdEdejddddFdfdGedHedefdIdJZ)ejdKdLde	jeej(ddMdejddddNdfdOedefdPdQZ*dS )R    N)logger)box)Table)synchronizer)requires_login)console)PIPECAT_CLI_NAME)API)configupdate_user_configuser_config_pathorganizationszUser organizationsT)namehelpno_args_is_helpkeyszAPI key management commands
propertiesz Organization property managementselectzSelect an organization to use.)r   r   z--organizationz-oorganizationc              	      sR  t d tjddd t I d H \}}|rt  W d    n1 s'w   Y  zmd}| sUtj	d fdd|D d	
 I d H }|sLtd
W S |d |d
 f}n(d }|D ]
}|d | krc|}qY|sutd|  d td
W S |d |d f}td |d  td|d
  d|d  dt d W d S  ty   td Y d S w )Norg9[dim]Retrieve user namespace / organization data...[/dim]dotsspinner)NNz'Select default namespace / organizationc                    s@   g | ]}|d   d|d  d|d |d  f|d  kdqS )verboseNamez (r   ))r   valuechecked ).0r   current_orgr   [/home/ubuntu/.local/lib/python3.10/site-packages/pipecatcloud/cli/commands/organizations.py
<listcomp>8   s    
zselect.<locals>.<listcomp>choices   r   r   z Unable to find namespace [bold]'z*'[/bold] in user's available organizationsr   z(Current organization set to [bold green]z [dim](z7)[/dim][/bold green]
[dim]Default namespace updated in [/dim]z:Unable to update user credentials. Please contact support.)r
   getr   statusr	   r   typerExitquestionaryr   	ask_asyncerrorr   successr   	Exception)r   org_listr.   selected_orgr   matchor   r    r"   r   $   sX   




listz'List organizations user is a member of.c                     s.  t d} tjddd t I d H \}}|r$t W  d    S W d    n1 s.w   Y  |r9t|sHtj	dt dd tdS t
d	tjd
dd}|jddd |jddd |D ]'}| r~|d | kr~|d|d  dd|d  d qa||d |d  qatj|t| dd d S )Nr   r   r   r   zYNo namespaces associated with user account. Please complete onboarding via the dashboard.dashboard_hostsubtitler&   dimTF)border_styler   	show_edge
show_linesOrganizationwhitestyleNamer   z[cyan bold]r   z[/cyan bold]z (active)[/cyan bold]z resultstitle_extra)r
   r(   r   r)   r	   r   r*   r+   lenr.   r   r   SIMPLE
add_columnadd_rowr/   )r!   r1   r.   tabler   r   r   r"   r5   _   s8   

z"List API keys for an organization.z!Organization to list API keys for)r   c              	      sL  | pt d}tjd| ddd t|I d H \}}|r+t W  d    S t|d dkrHt	dt
 d	 td
W  d    S tdddtjd}|d |d |d |d |d D ] }|j|d d |d |d |d r~dnd|d rdnd d qitj|d| d W d    d S 1 sw   Y  d S )Nr   0[dim]Fetching API keys for organization: [bold]''[/bold][/dim]r   r   publicr   I[bold]No API keys found.[/bold]
[dim]Create a new API key with the [bold]0 organizations keys create[/bold] command.[/dim]r&   Tr9   show_headerr<   r:   r   rA   Keyz
Created AtStatusmetadatar   key	createdAtrevokedRevokedActiveredr?   zAPI keys for organization: rB   )r
   r(   r   r)   r	   api_keysr*   r+   rD   r.   r   r   r   rE   rF   rG   r/   )r   r   datar.   rH   rS   r   r   r"   r      sJ   




"createz&Create an API key for an organization.z--namez-nz#Human readable name for new API keyz"Organization to create API key forFz	--defaultz-dzESet the newly created key as the active / default key in local configapi_key_namedefaultc                    sn  |pt d}| std I d H } | r| dkr$td tdS d }tj	d|  ddd	! t
| |I d H \}}|rKtdW  d    S W d    n1 sUw   Y  |r`d
|vrjtd tdS |}|sztjddd I d H }|rt||d
 | dd ntd tdddtjd}|d |d |d || |d
 | tj|dd d S )Nr   z8Enter human readable name for API key e.g. 'Pipecat Key' z%You must enter a name for the API keyr&   z([dim]Creating API key with name: [bold]'rJ   r   r   rS   z5Invalid response from server. Please contact support.zLWould you like to make this key the default key in your local configuration?F)r]   default_public_keydefault_public_key_name
active_orgadditional_dataz#[dim]Bypassing using key as defaultTr9   rN   rA   rP   r=   z Using as default in local configr7   )r
   r(   r,   textr-   r   r.   r*   r+   r)   r	   api_key_createconfirmr   printr   r   rE   rF   rG   r/   )r\   r   r]   r   rZ   r.   make_activerH   r   r   r"   
create_key   sn   







rj   deletez&Delete an API key for an organization.zOrganization to get tokens forc                    s  | pt d}tjd| ddd> t|I d H \}}|r+t W  d    S t|d dkrJt	dt
 d	 td
 	 W d    d S W d    n1 sTw   Y  tjddd |d D d I d H }|sstd
 t d|d
 k}|rtd I d H  zt|d d dd W n ty   t	d td
 Y S w tjd|d  ddd# t|d |I d H \}}|rtd
W  d    S W d    n1 sw   Y  td|d  d d S )Nr   rI   rJ   r   r   rK   r   rL   rM   r&   zSelect API key to deletec                 S   s*   g | ]}|d  d |d |d fdqS )rR   r   idrS   r   r   r   r   rS   r   r   r"   r#   0  s    zdelete_key.<locals>.<listcomp>r$   r`   z`This key is currently set as the default in your local config. Are you sure you want to proceed?)ra   r`   rb   z3Unable to remove default key from local user configz[dim]Deleting API key with ID z	...[/dim]zAPI key with ID: [bold]'z'[/bold] deleted successfully.)r
   r(   r   r)   r	   rY   r*   r+   rD   r.   r   r,   r   r-   rg   r   r0   api_key_deleter/   )r   r   rZ   r.   rS   key_is_defaultr   r   r"   
delete_key  sl   



rq   usez8Set default API key for an organization in local config.c              
      sN  | pt d}tjd| ddd t|I d H \}}|r+t W  d    S W d    n1 s5w   Y  t|d dkrRt	dt
 d	 td
 d S tjddd |d D d I d H }|sntd
 d S zt||d |d
 dd td|d
  d W d S  ty } zt| td W Y d }~d S d }~ww )Nr   rI   rJ   r   r   rK   r   rL   rM   r&   zSelect API key to usec                 S   s.   g | ]}|d  d |d |d  d fdqS )rR   r   rS   rm   r   rn   r   r   r"   r#   u  s     zuse_key.<locals>.<listcomp>r$   r_   rb   zAPI key with name: [bold]'z'[/bold] set as default.zBUnable to set default key in local config. Please contact support.)r
   r(   r   r)   r	   rY   r*   r+   rD   rh   r   r,   r   r-   r   r/   r0   r   debugr.   )r   r   rZ   r.   rS   er   r   r"   use_keyT  sR   


ru   z*List current organization property values.z#Organization to list properties forc                    s   | pt d}tjd| ddd t|I d H \}}|r+t W  d    S W d    n1 s5w   Y  |sCtd d S t	ddd	t
jd
}|jddd |jddd | D ]\}}||t| q^tj|d| d d S )Nr   z2[dim]Fetching properties for organization: [bold]'rJ   r   r   z$[dim]No properties configured.[/dim]TFr9   rN   Propertycyanr?   Valuer>   zProperties for organization: rB   )r
   r(   r   r)   r	   r   r*   r+   rh   r   r   rE   rF   itemsrG   strr/   )r   r   rZ   r.   rH   	prop_name
prop_valuer   r   r"   properties_list  s2   
r}   schemaz(Show available properties with metadata.z*Organization to show properties schema forc                    s  | pt d}tjd| ddd t|I d H \}}|r+t W  d    S W d    n1 s5w   Y  |sCtd d S t	dddt
jd	}|jd
dd |d |jddd |d |d | D ]J\}}|dd}|dd}|d}	|dd}
|	r|
dddd |	D  d7 }
|||dd|d urt|nd|d urt|nd|
 qmtj|d| d d S ) Nr   z9[dim]Fetching properties schema for organization: [bold]'rJ   r   r   z#[dim]No properties available.[/dim]Tr9   rN   rv   rw   r?   TypezCurrent ValuegreenDefaultDescriptioncurrentValuer^   r]   availableValuesdescriptionz
[dim]Available: , c                 s   s    | ]}t |V  qd S )N)rz   )r   vr   r   r"   	<genexpr>  s    z$properties_schema.<locals>.<genexpr>r'   typez[dim]not set[/dim]z$Properties schema for organization: rB   )r
   r(   r   r)   r	   properties_schemar*   r+   rh   r   r   rE   rF   ry   joinrG   rz   r/   )r   r   rZ   r.   rH   r{   	prop_infocurrentr]   	availabler   r   r   r"   r     sR   
	




 
r   setz Update an organization property..zName of the property to setzValue to setz#Organization to update property forproperty_namer   c                    s   |pt d}tjd|  d| ddd" t|| |iI d H \}}|r1t W  d    S W d    n1 s;w   Y  |sLtd tdS || |}t	d	|  d
| d d S )Nr   z[dim]Updating property [bold]'"'[/bold] for organization: [bold]'rJ   r   r   zFailed to update property.r&   zProperty [bold cyan]z [/bold cyan] set to [bold green][/bold green])
r
   r(   r   r)   r	   properties_updater*   r+   r.   r/   )r   r   r   r   rZ   r.   	new_valuer   r   r"   properties_set  s&   	

r   zdefault-regionz2Get or set the default region for an organization.z/Region to set as default (omit to show current)zOrganization to configureregionc                    s  |pt d}| r]tjd|  d| ddd" t|d| iI d H \}}|r3t W  d    S W d    n1 s=w   Y  |sNtd td	S t	d
|d|  d d S tjd| ddd t
|I d H \}}|rt W  d    S W d    n1 sw   Y  |rd|vrtd d S |d }|d|dd}|dg }td| d |rtdd| d d S d S )Nr   z&[dim]Setting default region to [bold]'r   rJ   r   r   defaultRegionz Failed to update default region.r&   z"Default region set to [bold green]r   z6[dim]Fetching default region for organization: [bold]'z([dim]No default region configured.[/dim]r   r]   znot setr   zDefault region: [bold green]z[dim]Available regions: r   r'   )r
   r(   r   r)   r	   r   r*   r+   r.   r/   r   rh   r   )r   r   r   rZ   r.   propr   r   r   r   r"   default_region  sN   	


	
r   )+r,   r*   logurur   richr   
rich.tabler   pipecatcloud._utils.async_utilsr   pipecatcloud._utils.auth_utilsr   !pipecatcloud._utils.console_utilsr   pipecatcloud.clir   pipecatcloud.cli.apir	   pipecatcloud.cli.configr
   r   r   Typerorganization_clikeys_cliproperties_cli	add_typercommandcreate_blockingOptionrz   r   r5   r   boolrj   rq   ru   r}   r   Argumentr   r   r   r   r   r"   <module>   s.  

"8$1RB6%8"