
    kj                         d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ dedefd	Zd
eeef   deeef   fdZdedefdZdedededededefdZdedefdZy)    N)DictAny)AsyncOpenAI)datetime	timedelta)settings)get_hotel_detailscurrent_hotel_idreturnc                    K   g }t                d {   }|j                         D ]8  \  }}|| k(  r|j                  d|d    d|d    d|d    d|d    d	| d
       : dj                  |      S 7 `w)Nz
<OUR-OTHER-HOTELS>
    <NAME>
hotel_namez</NAME>
    <ADDRESS>hotel_addressz</ADDRESS>
    <EMAIL>hotel_emailz</EMAIL>
    <PHONE>hotel_phonez</PHONE>
    <HOTEL-ID>z </HOTEL-ID>
</OUR-OTHER-HOTELS>

)r	   itemsappendjoin)r
   hotels
HOTEL_INFOhotel_idinfos        8/var/www/html/ls-ibe-bot-apis-staging/app/utils/extra.pybuild_other_hotelsr      s     F(**J$**,$'' 
 ?#$ %  !  !j  		 - 99V +s   A5A3A!A5	cart_datac                    g }d}d}| j                         D ]J  \  }}|s
|d   }|j                  d      |j                  d      xs |j                  d      t        |j                  dd            t        |j                  dd            d	}|j                  d      d
k(  r|j	                  |j                  d      |j                  d      |j                  d      |j                  d      t        |j                  dd            |j                  d      t        |j                  dd            d       nP|j                  d      dk(  r<|j	                  |j                  d      t        |j                  dd            d       g }|j                  dg       D ]>  }	|j                  |	j                  d      t        |	j                  dd            d       @ |r||d<   |j                  d      rt        |j                  d            |d<   |j                  |       |t        |j                  dd            z  }|t        |j                  dd            z  }M |t        |      t        |d      t        |d      dS )z
    Convert raw cart payload into compact LLM-friendly structure.
    Removes unnecessary/internal/system fields to save tokens.
    g        r   	cart_typefe_display_product_namecart_product_nameservice_quantity   grand_total)typenamequantitytotalreservationcart_room_hotel_nameroom_type_nameroom_stay_fromroom_stay_toroom_stay_guest_countrate_plan_namesubtotal)hotelroomcheck_in	check_outguests	rate_planr.   posattached_room_name)attached_roomr.   tax_infotax_name
tax_amount)r$   amounttaxesdescriptiontotal_deposit_amount   )r   cart_items_countr"   r>   )	r   getintfloatupdater   
clean_htmllenround)
r   compact_itemsr"   r>   _r   itemcompact_itemr<   taxs
             r   compact_cart_for_llmrM      s^    MKOO%5Qx HH[)HH67 5xx 34DHH%7;<488M156
 88K M1"89!12 HH%56!XXn5dhh'>BC!XX&67!$((:q"9:!  XXk"e+!%*>!?!$((:q"9:!  88J+CLL
+a 89  , $)L! 88M"*4'+L' 	\*uTXXmQ788dhh/Eq&I JJm &r .[!, %&:A >	     textc                 |    ddl }| sy|j                  dd|       }|j                  dd|      j                         }|S )z"
    Remove simple HTML tags.
    r   N z<.*?>z\s+ )resubstrip)rO   rS   cleans      r   rE   rE   h   s?     FF8R&EFF63&,,.ELrN   checkindatecheckoutdater   sub_hotel_id	hotel_idsc                 r  K   	 t        j                  | d      j                         }t        j                  |d      j                         }||k  rdddS ||k(  rdddS t        j
                   d}||d}t        j                  | d      j                  d	      }	t        j                  |d      j                  d	      }
|	|
d
t        |      s|n|d   ddd}	 t        j                  d      4 d{   }|j                  |||       d{   }|j                          |j                         }ddd      d{    i }j                  dg       D ]1  }t        j                  |d   d      j                         }|d   ||<   3 |}||k  r@|j                  |      dk(  r||k(  r	dd| ddS dd| ddS |t!        d      z  }||k  r@|j                  di       }|j                  d      }|j                  |d      }	 t#        |      }||z
  j&                  }|dkD  r||k  rdd|  d| d | d!dS dd
dS # t        $ r dddcY S w xY w7 b7 I7 # 1 d{  7  sw Y   -xY w# t        $ r}t        d|        dddcY d}~S d}~ww xY w# t        t$        f$ r d}Y w xY ww)"z
    checkindate / checkoutdate format: MM-DD-YYYY
    Returns True if booking is allowed, else False.
    Prints warning message before returning False.
    z%m-%d-%YFz'Something went wrong. Please try again.)statusmessagez`The checkout date must be later than the check-in date. Please select a different checkout date.zXCheck-in and checkout dates cannot be the same. Please select a different checkout date.z*frontend/Searchresults/getPriceMlsStopSell)r   rY   z%Y-%m-%drQ   r   T)firstlastpromorY   fromSuitesPageibeV2g      N@)timeoutN)jsonheaderszWarning: API request failed: stopSelldatez%m/%d/%Yvaluer!   z(Rooms are not available for check-in on z*. Please select a different check-in date.zRooms are not available on zM, which falls within your selected stay dates. Please choose different dates.)daysminStayzBookings starting on z require a minimum stay of z% night(s), but your selected stay is z' night(s). Please choose a longer stay.)r   strptimerg   
ValueErrorr   
LS_API_URLstrftimerF   httpxAsyncClientpostraise_for_statusrd   	ExceptionprintrA   r   rB   	TypeErrorri   )rW   rX   r   rY   rZ   checkincheckouturlre   checkindate_for_payloadcheckoutdate_for_payloadpayloadclientresponsedataestop_sell_maprJ   dtcurrentmin_staycheckin_keyrequired_nightsactual_nightss                           r   is_booking_allowedr   v   sS    W##K<AAC$$\:>CCE 7  -O  P  	P(  -G  H  	H  !!K
LC $G '//ZHQQR\]'00zJSST^_ )(,/	N	!GW$$T22f#[[7G[LLH%%'==?D 32 MR(tF|Z8==? Mb )
 G
H
W%*'!#!I'R|}  $!<WI  FS   T  	9!$$ H
" xx	2&H"":.Kll;2Oo. '--M}>.{m;VWfVg  hM  N[  M\  \C  D
 	

 r**g  W,UVVW< 3L 3222  W-aS12,UVVWL 	" s   J7AI BJ7I7 6I7I7 :I!I$I!7I7 II7 BJ75J7J  -J7IJ7IJ7I7 I!I7 !I4'I*(I4/I7 7	J JJJ7JJ7 J41J73J44J7audio_file_base64c                 R  K   t        t        j                        }d| v r| j                  dd      \  }}n| }t	        j
                  |      }t        j                  |      }d|_        |j                  j                  j                  d|       d {   }|j                  S 7 w)N)api_key,r!   z
audio.webmzgpt-4o-transcribe)modelfile)r   r   OPENAI_API_KEYsplitbase64	b64decodeioBytesIOr$   audiotranscriptionscreaterO   )r   r|   rI   
audio_dataaudio_bytes
audio_file
transcripts          r   transcribe_audior      s     !8!89F )//Q7:&
"":.KK(J"JO||2299! :  J
 ??s   BB'B%B')r   r   ro   typingr   r   openair   r   r   app.configs.settingsr   app.utils.constantsr	   strr   rM   rE   listboolr   r    rN   r   <module>r      s     	    ( ) 1s s &GDcN GtCH~ GTS S ^+# ^+S ^+C ^+_b ^+os ^+x| ^+@c c rN   