
    i                         d dl mZ d dl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 d d	lmZmZmZ e G d
 d             Zdededz  fdZdedefdZdede	defdZdedz  de	defdZdede	defdZy)    )	dataclassN)HTTPExceptionstatus)select)Session)get_settings)Room)Venue)enforce_layout_policy_for_venueensure_room_for_venueensure_venue_setupc                   J    e Zd ZU eed<   eed<   eed<   eed<   eedf   ed<   y)PortalTenantContext	tenant_idtenant_slug
venue_name	user_role.permissionsN)__name__
__module____qualname__str__annotations__tuple     ;PRENOTAZIONI_IA/backend/app/services/tenant_sync_service.pyr   r      s%    NONsCx r   r   payloadreturnc           	      d   t        | t              sy | j                  d      }| j                  d      }t        |t              rt        |t              sy |j                  d      }t        |t              sy t        |j                  d      xs d      j	                         }t        |j                  d      xs d      j	                         }d}|j                  d      }t        |t
              rH|D ]C  }t        |t              st        |j                  d      xs d      j	                         }|sC n |s,t        |j                  d      xs d      j	                         }t        |j                  d	      xs d      j	                         j                         }	|j                  d
      }
g }t        |
t
              rK|
D ]F  }t        |xs d      j	                         j                         }|s1||vs6|j                  |       H |r|r|r|	sy t        ||||	t        |            S )Ntenant_contextcurrent_usertenantid slugvenuesnameroler   )r   r   r   r   r   )

isinstancedictgetr   striplistlowerappendr   r   )r   r!   r"   r#   r   r   r   r'   venuer   permissions_rawr   itemvalues                 r   _extract_portal_contextr5      s   gt$[[!12N;;~.Lnd+:lD3Q)Ffd#FJJt$*+113Ifjj(.B/557KJ)F&$ 	EeT*UYYv.4"5;;=J	 F+1r288:
L$$V,2399;AACI"&&}5OK/4(# 	*D
O))+113Ek1""5)	*
 Kz+& r   session_tokenc                 T   | j                         }|st        t        j                  d      t	               }|j
                  j                  d       d}	 t        j                  |j                        5 }|j                  |dd| i      }d d d        j                  t        j                  k(  rt        t        j                  d
      |j                  t        j                  k(  rt        t        j                  d      |j                   st        t        j                  d      t#        |j%                               }|t        t        j                  d      |S # 1 sw Y   xY w# t        j                  $ r!}t        t        j                  d	      |d }~ww xY w)NzSessione portale mancantestatus_codedetail/z/auth/me)timeoutAuthorizationzBearer )headerszIImpossibile contattare il backend del portale per sincronizzare il localez%Sessione portale non valida o scaduta.Questo account non puo accedere a Prenotazioniz@Sincronizzazione del locale non riuscita dal backend del portalezBIl backend del portale non ha restituito un contesto tenant valido)r-   r   r   HTTP_400_BAD_REQUESTr   assistant_api_base_urlrstriphttpxClientassistant_timeout_secondsr,   	HTTPErrorHTTP_502_BAD_GATEWAYr9   HTTP_401_UNAUTHORIZEDHTTP_403_FORBIDDEN
is_successr5   json)r6   cleaned_tokensettingsendpointclientresponseexcportal_contexts           r   fetch_portal_tenant_contextrS   I   s{   !'')M(C(CLghh~H1188=>hGH\\("D"DE 	bzz(_P]F_4`zaH	b v;;;(D(DMtuuv888(A(AJz{{33U
 	

 -X]]_=N33W
 	

 3	b 	b?? 33^
 	s0    E3 7E'E3 'E0,E3 3F'F""F'rR   dbc                 *   |j                  t        t              j                  t        j                  | j
                  k(              }|d}|j                  }|j                  t        t        j                        j                  t        j                  |j                  k(        j                  d            d u}|j                  | j                  k7  r| j                  |_        d}|j                  | j                  k7  r| j                  |_        d}t        |j                  |      }t!        |||       |s|r|s!|j#                          |j%                  |       |S t'        || j                  | j
                  | j                        \  }}}}|S )NF   T)r   portal_tenant_idportal_tenant_slug)scalarr   r
   whererW   r   layout_policy_appliedr	   r$   venue_idlimitr(   r   rX   r   r   r   commitrefreshr   )rR   rT   r1   updates_appliedpolicy_beforeroom_existedroom_s           r   ensure_portal_tenant_venuere   n   sE   IIfUm))%*@*@ND\D\*\]^E33yy!6!6t}}7P!Q!W!WXY!Z[cgg::222'22EJ"O##~'A'AA'5'A'AE$"O$UXXr2'tR8-|IIKJJu'
!,,'11)55	NE1a Lr   c                    | xs dj                         }|st        t        j                  d      t	        |      }|j
                  dk(  r)d|j                  vrt        t        j                  d      t        ||      S )Nr%   zSessione portale richiestar8   staffprenotazionir?   )rR   rT   )	r-   r   r   rH   rS   r   r   rI   re   )r6   rT   rL   rR   s       r   resolve_current_venueri      sy    "(b//1M(D(DMijj0?N7*~^E_E_/_11C
 	
 &^KKr   c                     t        | |      S )Nr6   rT   )ri   rk   s     r   sync_venue_name_from_portalrl      s     }DDr   )dataclassesr   rC   fastapir   r   
sqlalchemyr   sqlalchemy.ormr   app.core.configr   app.models.roomr	   app.models.venuer
   app.services.seed_servicer   r   r   r   objectr5   r   rS   re   ri   rl   r   r   r   <module>rv      s    !  )  " (   " p p ! ! !/V /0Cd0J /d"s "7J "J2E 7 W\ >LC$J LG L LE# E7 Eu Er   