
    Aqh                     B   d dl mZmZmZmZmZmZmZ d dlm	Z	 d dl
Z
d dlZd dlmZmZmZmZ d dlmZ ddlmZmZmZmZmZ ddlmZ d d	lm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 dl#m$Z$  e
jJ                  e&      Z'e'jQ                  e
jR                         d dl*m+Z+m,Z, d dlmZ  e       Z- G d de      Z.d Z/de0de0de1fdZ2e-jg                  dee4ef          edd       eddd       ed       ed       ee       ee      fde5d e5d!ee4   d"ee4   d#e	d$efd%       Z6e-jg                  d&ee4ef          ee       ee      fd'e4d#e	d$efd(       Z7e-jq                  d)e+jr                         ed*       ee      fd+ee4ef   d#e	fd,       Z:y)-    )	APIRouterDependsHTTPExceptionstatusBodyRequestQuery)SessionN)DictAnyListOptional)get_db   )get_paginated_appointmentsfetch_call_log_by_twilio_idsend_appointment_emailcreate_appointmentsend_appointment_email_update)verify_token_internally)	BaseModel)datetimetimezone)JSONResponse)r   r   )parser)r   )ZoneInfo)schemasmodelsc                       e Zd ZU eed<   y)CatchPhraseCreatephrasesN)__name__
__module____qualname__str__annotations__     B/var/www/html/DP/alpha_backend/auth_service/routers/appointment.pyr    r       s    Lr(   r    c                 L    t        j                  | d      j                  d      S )Nz%H:%Mz%I:%M %p)r   strptimestrftime)time_strs    r)   format_timer.      s     Xw/88DDr(   
old_timing
new_timingreturnc                    g }t        | j                               t        |j                               z  }t        |      D ]6  }| j                  |      }|j                  |      }|r%|s#|j	                  |j                          d       M|s%|r#|j	                  |j                          d       tt        |t              st        |t              s|j                  d      }|j                  d      }|j                  d      }	|j                  d      }
||	k7  s||
k7  s|j	                  d|j                          dt        |       dt        |       dt        |	       dt        |
       
       9 |S )	Nz has been turned off.z has been turned on.
start_timeend_timezUpdated Office Timing for z from z - z to )	setkeyssortedgetappend
capitalize
isinstancedictr.   )r/   r0   messagesall_daysdayold_daynew_day	old_startold_end	new_startnew_ends              r)   compare_office_timingsrF   "   sV   H:??$%JOO,=(>>Hh..%..% 7OOs~~/00EFG 7OOs~~/00DEF gt$GT)BL1Ikk*-GL1Ikk*-GI%G);01A0B&"9-.c+g2F1Gt"9-.c+g2F1GI-  8 Or(   z/appointmentList)response_model   )ge
   d   )rI   lepage	page_size	startDateendDatedbcurrent_userc                    	 |r%t        j                  |      j                  d       nd }|r%t        j                  |      j                  d       nd }t        || |||      S # t        $ r}t	        ddt        |             d }~ww xY w)Ntzinfoi  zInvalid datetime: status_codedetail)r   isoparsereplace
ValueErrorr   r%   r   )	rM   rN   rO   rP   rQ   rR   startendes	            r)   read_appointment_listr_   F   s    SCL	*22$2?RV?Ffoog&..d.;D &b$	5#FF  S6HQ4QRRSs   AA# #	B
,BB
z/call-log/{twilio_call_id}twilio_call_idc                 @    t        ||       }|st        dd      d|iS )Ni  zCall log not foundrV   data)r   r   )r`   rQ   rR   results       r)   get_call_log_by_twilio_idrd   X   s,     )^<F4HIIFr(   z/appointment_scheduling.rb   c                   K   | j                  di       }| j                  di       }t        d|  d|        |j                  d      }|dk(  r|j                  d      }n|j                  d      }|j                  d	i       j                  d
      }t        j                  |j                  d      d      }|j	                  t        d            }|j                  t        d            }||j                  d      |j                  d      ||j                  d      dk(  rdnd|d}	t        d|	        t        j                  di |	}
t        ||
      \  }}|j                  d      |j                  d      ||j                  d      d}|rt        |       nt        |       t        j                  d|	        t        d|	        t        ddit        j                         S w)Ncallargsz=-=-=-=-=-=-=-=Data 1: z, ============ arg 	directioninboundfrom_number	to_numbertelephony_identifiertwilio_call_sidschedulez%Y-%m-%d %H:%M:%SzAmerica/Los_AngelesrT   UTCnameemailoffTimer   FT)r`   rp   rq   phoneoff_timern   z=-=-=-=-=-=-=-=Data 2: )rp   rq   rs   rn   zAppointment: messagez#Appointment scheduled successfully.)contentrW   r'   )r8   printr   r+   rZ   r   
astimezoner   AppointmentCreater   r   r   loggerinfor   r   HTTP_200_OK)rb   rQ   	call_datarg   rh   customer_phonerm   
local_timeutc_timeappointment_dataappointment_createappointment_resultwas_updatedappointment_data2s                 r)   schedule_appointmentr   f   s     $I88FBD	#D6)<TF
CDk*II"}5"{3
  mm$:B?CCO ""488J#79LMJ##84I+J#KJ$$Xe_5H ) '"!XXi0A5E4 
#$4#5
67 22F5EF&8=O&P#  '"HHZ(	 %&7801
KK- 0123	M*+
,-,Q R$*$6$68 8s   G)G+);fastapir   r   r   r   r   r   r	   sqlalchemy.ormr
   loggingostypingr   r   r   r   app.common.databaser   services.appointment_servicer   r   r   r   r   services.auth_servicer   pydanticr   r   r   fastapi.responsesr   dateutilr   zoneinfor   	getLoggerr"   rz   setLevelINFO
app.commonr   r   routerr    r.   r<   listrF   r8   r%   intr_   rd   postAppointmentr   r'   r(   r)   <module>r      s   S S S "  	 , , & o  o ;  ' *     
		8	$   & & 
	 E t    $  H tCH~>aA2!,$T{"4[&/ !89G
GG }G c]	G
 	G G ?G" (c3hH &/ !89


 
 I
 &w7J7JK9&/88
sCx.88 	88 L88r(   