
    i*                        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 d dlmZmZ d dlmZ d	Z ed
      j&                  Zde	dz  defdZdede	fdZdededefdZdededz  fdZdededz  fdZdede	defdZdddede	dz  de	dz  fdZddddede	dz  dedz  dee	ef   dz  fdZ d&dededz  dee	ef   fdZ!dedededee	ef   fdZ"dede	dedz  fd Z#dede	dedz  fd!Z$d'd"ed#edefd$Z%de	dedefd%Z&y)(    )select)Session)get_settings)VenueBookingSettings)Venue)VenueBookingSettingsReadVenueBookingSettingsUpdate)compose_assistant_promptget_assistant_profile)-uses_legacy_whatsapp_fallback_for_tenant_slugx   whatsappvenueNreturnc                 2    | yt        | j                        S )NF)r   portal_tenant_slug)r   s    N/var/www/html/PRENOTAZIONI_IA/backend/app/services/booking_settings_service.py'uses_legacy_whatsapp_fallback_for_venuer      s    }89Q9QRR    dbc                     | j                  t        t              j                  t        j                              }|t        d      |S )NzNessun locale configurato)scalarr   r   order_byid
ValueError)r   r   s     r   get_default_venuer      s9    IIfUm,,UXX67E}455Lr   venue_idc                 &   |j                  t        t              j                  t        j                  | k(              }||j
                  d|_        |j                  d|_        |j                  d|_        |j                  d|_        |j                  d|_	        |j                  d|_
        |j                  d|_        |j                          |S t        | t        ddddddd	      }|j                  |       |j                          |S )N )	r   turn_duration_minuteswhatsapp_assistant_promptwhatsapp_business_account_idwhatsapp_business_idwhatsapp_phone_number_idwhatsapp_access_tokenwhatsapp_display_phone_numberwhatsapp_verified_name)r   r   r   wherer   r!   r"   r#   r$   r%   r&   r'   flushDEFAULT_TURN_DURATION_MINUTESadd)r   r   settingss      r   ensure_booking_settingsr-      s   yy 45;;<P<Y<Y]e<efgH--513H.00846H1((0,.H),,402H-))1-/H*11957H2**2.0H+

#;"$%'!# &(!
H FF8HHJOr   r,   c                 B    | j                   j                         }|xs d S N)r%   stripr,   cleaneds     r   get_saved_whatsapp_access_tokenr3   @   s     ,,224G?dr   c                 B    | j                   j                         }|xs d S r/   )r$   r0   r1   s     r   "get_saved_whatsapp_phone_number_idr5   E   s     //557G?dr   c                     t        |      syt               }|j                  xs dj                         }|j                  xs dj                         }t        |xr t        |        xs |xr t        |              S )NFr   )r   r   r%   r0   r$   boolr3   r5   )r,   r   settings_configglobal_access_tokenglobal_phone_number_ids        r   uses_global_whatsapp_fallbackr;   J   s}    259"nO*@@FBMMO-FFL"SSU		N%DX%N!N 	Y"W+Mh+W'W r   preferred_venuer=   c          	      *   ||j                   rt        | j                  t        t        j
                        j                  t        j                   j                  d             j                  t        j
                        j                  d                  }||j
                  gk7  ry |S t        | j                  t        t        j
                        j                  t        j
                        j                  d                  }||j
                  gk7  ry |S t        | j                  t        t              j                  t        j                   j                  d             j                  t        j
                        j                  d                  }t        |      dk(  r|d   S t        | j                  t        t              j                  t        j
                        j                  d                  }t        |      dk(  r|d   S y )N      r   )portal_tenant_idlistscalarsr   r   r   r(   is_notr   limitlen)r   r=   tenant_venue_ids	venue_idstenant_venuesvenuess         r   #_select_auto_adoptable_legacy_venuerK   V   s   "++#

6%((+11%2H2H2O2OPT2UV__`e`h`hioopqrs   O$6$6#77
  RZZuxx(8(A(A%(((K(Q(QRS(TUVI_//00


6%=&&u'='='D'DT'JKTTUZU]U]^ddefghM =QQ"**VE]33EHH=CCAFGHF
6{aayr   )r=   expected_phone_number_idrL   c                   t               }|j                  xs dj                         }|j                  xs dj                         }|sy |xs dj                         }|r||k7  ry t	        | |      }|y | j                  t        t        j                        j                  t        j                  |k(        j                  d            }|||j                  k7  ry t        |j                  |       }	t        |	      }
|
r|
|k7  ry d}|
s	||	_        d}|rt        |	      s	||	_        d}|r| j                          ||	fS )Nr   r<   r@   FT)r   r$   r0   r%   rK   r   r   r   r   r(   rE   r   r-   r5   r3   r)   )r   r=   rL   r8   r:   r9   #normalized_expected_phone_number_idcandidate_venueexisting_owner_idr,   saved_phone_number_idupdates_applieds               r   #adopt_legacy_whatsapp_configurationrS   p   sD    #nO-FFL"SSU*@@FBMMO!+C+Ir*P*P*R'*/RVl/l9"o^O		#,,-	#<<@VV	W	q
 $):o>P>P)P&'9'92>H>xH!6:P!PO ,B)#B8#L)<&

H$$r   c                     |t        |       n| j                  t        |      }|t        d      t	        |j
                  |       }t        |      rt        | |      }||\  }}||fS )NLocale non trovator<   )r   getr   r   r-   r   r   rS   )r   r   r   r,   adopted_configurations        r   get_booking_settingsrX      so    %-%5b!266%;RE}-..&uxx4H.u5 CBX] ^ ,3OE8(?r   payloadc                    |j                  t        |       }|t        d      t        |j                  |      }|j
                  |_        |j                  j                         |_        |j                  j                         |_        |j                  j                         |_	        |j                  j                         }|r|j                  t        t        j                        j                  t        j                  |j                  k7  t        j                  |k(        j!                  d            }|t        d      ||_
        |j"                  j                         |_        |j$                  j                         |_        |j&                  rd|_        n+|j(                  |j(                  j                         |_        |j+                          |j-                  |       ||fS )NrU   r@   u:   Questo Phone Number ID è già associato a un altro localer   )rV   r   r   r-   r   r    r!   r0   r"   r#   r$   r   r   r   r   r(   rE   r&   r'   reset_whatsapp_access_tokenr%   commitrefresh)r   rY   r   r   r,   cleaned_phone_number_idconflicting_venue_ids          r   update_booking_settingsr`      s   FF5(#E}-..&uxx4H%,%B%BH")0)J)J)P)P)RH&,3,P,P,V,V,XH)$+$@$@$F$F$HH!%>>DDF!yy'001U$--9$==AXX U1X 
  +YZZ(?H%-4-R-R-X-X-ZH*&-&D&D&J&J&LH#**)+&		&	&	2)0)F)F)L)L)N&IIKJJx(?r   c                     | j                   j                         }|r|S t        |      r,t               j                   xs dj                         }|xs d S y Nr   )r%   r0   r   r   )r,   r   venue_tokenglobal_tokens       r   #get_effective_whatsapp_access_tokenre      sP    00668K.u5$<<BIIK#t#r   c                     | j                   j                         }|r|S t        |      r,t               j                   xs dj                         }|xs d S y rb   )r$   r0   r   r   )r,   r   venue_phone_number_idr:   s       r   &get_effective_whatsapp_phone_number_idrh      sR    $==CCE$$.u5".."I"I"OR!V!V!X%--r   
venue_namecustom_promptc                     t        d| |      S )Nr   )ri   locale_instructions)r
   )ri   rj   s     r   build_whatsapp_assistant_promptrm      s    #) r   c                 .   t        |      }t        |      }t        di d| j                  d| j                  d|j
                  ddd|j                  xs ddt        d	t        | j                  |j                  xs d      d
|j                  xs dd|j                  xs ddt        ||       xs dd|j                  xs dd|j                  xs ddt        t        ||             dt        |      dt        |      dt!        ||       S )Nr   ri   r    whatsapp_enabledTr!   r   whatsapp_assistant_base_prompt#whatsapp_assistant_effective_promptr"   r#   r$   r&   r'    whatsapp_access_token_configuredwhatsapp_phone_number_id_savedwhatsapp_access_token_savedwhatsapp_uses_global_fallback )r3   r5   r   r   namer    r!   &DEFAULT_WHATSAPP_ASSISTANT_BASE_PROMPTrm   r"   r#   rh   r&   r'   r7   re   r;   )r   r,   saved_access_tokenrQ   s       r   serialize_booking_settingsrz      s[   8B>xH# :: '<< 	
 #+"D"D"J (N -LJJ..4"-
 &.%J%J%Pb &::@b "HRW!X!^\^ '/&L&L&RPR  (>>D"  *..QRZ\a.b)c!" (,,A'B#$ %));$<%& 'DHe&T' r   r/   )r   )'
sqlalchemyr   sqlalchemy.ormr   app.core.configr   app.models.bookingr   app.models.venuer   app.schemas.bookingr   r	   shared.assistant_profilesr
   r   shared.tenant_featuresr   r*   base_promptrx   r7   r   r   intr-   strr3   r5   r;   rK   tuplerS   rX   r`   re   rh   rm   rz   rv   r   r   <module>r      s%    " ( 3 " T U P # )>z)J)V)V &S54< SD S' e !c !w !;O !H.B sTz 
1E #PT* 
	,@ 	 	SW 	 Y] G QU afimam : %)+/	,%,% T\,% "Dj	,%
 5&&'$.,%^	W 	d
 	eESgLgFh 	c 4N T[ `efk  nB  gB  aC D2F u Y\_cYc 5I RW \_bf\f  C QT e 7K Ph r   