
     oh&              
       N   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
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mZmZmZmZ ddlmZmZ dd	lmZ d d
lmZ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mZ d dl(m)Z)  e       Z* G d de#      Z+d Z,de-de-de.fdZ/e*ja                  d       ee      fde+de	fd       Z1e*je                  d       ed       ee       ee      fdee3ef   de	defd       Z4e*ja                  d        ed       ee       ee      fdee3ef   de	defd!       Z5e*jm                  d"       ee       ed#d#$       ed%d#d&'      fdede	d(e7d)e7fd*       Z8e*je                  d+       ed       ee       ee      fd,e7d-ede	defd.       Z9e*jm                  d/       ee       ee      fd0e3de	defd1       Z:e*jm                  d       ee       ee      fde	defd2       Z;e*jy                  d+       ee       ee      fd,e7de	defd3       Z=y4)5    )	APIRouterDependsHTTPExceptionstatusBodyRequestQuery)Session)DictAnyListOptional)get_db)SettingsRepo   )save_settingget_settingget_all_settingsdelete_settingget_paginated_appointmentsfetch_call_log_by_twilio_id)create_settingupdate_setting)verify_token_internally)AdvisorSettingsAppointmentScheduling)	BaseModel)datetimetimezone)JSONResponse)r   r   )parserc                       e Zd ZU eed<   y)CatchPhraseCreatephrasesN)__name__
__module____qualname__str__annotations__     ?/var/www/html/DP/alpha_backend/auth_service/routers/settings.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_timer2      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dictr2   )r3   r4   messagesall_daysdayold_daynew_day	old_startold_end	new_startnew_ends              r-   compare_office_timingsrJ      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/settings/create/catch-phrasesrequestdbc                    | j                   }|j                  t              j                  t        j                  dk(        j                         }t        j                  t        j                        }|r||_
        ||_        |j                          n0t        d|||      }|j                  |       |j                          t        ddit        j                         S )z
    Create a new keyword.
    CATCH_PHRASES)namevalue
created_at
updated_atmessagez!Catch phrases saved successfully.)contentstatus_code)r%   queryr   filterrO   firstr   nowr    utcrP   rR   commitaddr!   r   HTTP_200_OK)rK   rL   r%   existing_settingcurrent_timenew_settings         r-   create_catch_phrasera   =   s     ooGxx)00/1QRXXZ<<-L!(&2#
		 ##	
 	{
		,O P$*$6$68 8r,   z	/settings.settingcurrent_userc                 l  K   t        |       dk(  r*d| vr&d| vr"t        | j                               d   }| |   }n"| j                  d      }| j                  d      }|st	        t
        j                  d      |j                  t              j                  t        j                  |k(        j                         }|st	        t
        j                  d| d      |j                  }||_        t        j                  t         j"                        |_        |d	k(  rMt'        |      }|j)                  ||j                  d
             |j+                  ||j                  d             |dk(  rddl}t/        |t0              r|j3                  |      }t/        |t0              r|j3                  |      }t5        ||      }	t'        |      }|j)                  ||j                  d
             |	r0t        |	      dkD  r"|j7                  ||j                  d      |	       |dk(  rddl}t/        |t0              r|j3                  |      }t/        |t0              r|j3                  |      }t5        ||      }	t'        |      }|j)                  ||j                  d
             |	r0t        |	      dkD  r"|j7                  ||j                  d      |	       	 |j9                          d||dS # t:        $ r<}
|j=                          t	        t
        j>                  dt1        |
             d}
~
ww xY ww)a2  
    Update an existing setting by name
    
    Expects either:
    1. A JSON object with name and value keys:
       {
           "name": "setting_name",
           "value": "setting_value"
       }
    
    2. Or a direct key-value pair:
       {
           "SETTING_NAME": "setting_value"
       }
       rO   rP   r   Setting name is requiredrU   detailzSetting with name '' not found
BDC_NUMBERuser_idOFFICE_TIMINGNSALES_DEPARTMENTT)successrO   rP   zFailed to update setting: ) lenlistr:   r<   r   r   HTTP_400_BAD_REQUESTrV   r   rW   rO   rX   HTTP_404_NOT_FOUNDrP   r   rY   r    rZ   rR   r   create_settings_history!send_advance_setting_update_alertjsonr?   r)   loadsrJ   send_setting_update_alertr[   	ExceptionrollbackHTTP_500_INTERNAL_SERVER_ERROR)rb   rL   rc   rO   rP   r^   	old_valuesettings_reporu   change_timingses              r-   update_setting_by_namer   ]   s    . 7|qV72wg7MGLLN#A& {{6"G$33-
 	
 xx)00$1FGMMO11(k:
 	
 !&&I""*,,x||"<|$R(--dL4D4DY4OP77l>N>Nv>VWi%

9-IeS!JJu%E/	5A$R(--dL4D4DY4OPc.1A533D,:J:J6:RTbc!!i%

9-IeS!JJu%E/	5A$R(--dL4D4DY4OPc.1A533D,:J:J6:RTbc

		>> 

==/Ax8
 	

s*   KL4K, +L4,	L157L,,L11L4z/settings/createc                    K   | j                  d      }| j                  d      }|st        t        j                  d      t	        |||      }|st        t        j                  d| d      d|dS w)	z
    Create a new setting
    
    Expects a JSON object with name and value keys:
    {
        "name": "setting_name",
        "value": "setting_value"
    }
    rO   rP   rf   rg   	Setting 'z(' already exists or could not be createdT)rn   rO   )r<   r   r   rq   r   )rb   rL   rc   rO   rP   rn   s         r-   create_new_settingr      s      ;;vDKK E33-
 	

 Ru-G33tf$LM
 	
 T**s   A3A5z/settings/historyre   )ge
   d   )r   lepage	page_sizec                 d   K   ddg}t        |      j                  |||      \  }}||||ddS w)Nrl   rj   )namesr   r   )total_pagesr   r   )data
pagination)r   get_settings_history_paginated)rK   rL   r   r   r   entitiesr   s          r-   get_settings_historyr      sQ      l+E(,KKRW^bnwKxHk&"
 s   .0z/settings/{setting_id}
setting_idrP   c                 p   K   t        || |      }|st        t        j                  d|  d      d| dS w)za
    Update an existing setting by ID
    
    Expects the setting value in the request body
    Setting with ID z" not found or could not be updatedrg   Trn   id)r   r   r   rr   )r   rP   rL   rc   rn   s        r-   update_existing_settingr      sI      RU3G11%j\1ST
 	
 :..s   46z/settings/{name}rO   c                 n   K   t        ||       }|t        t        j                  d|  d      | |dS w)z
    Get a setting by name
    r   ri   rg   )rO   rP   )r   r   r   rr   )rO   rL   rc   rP   s       r-   read_settingr      sH      D!E}11tfK0
 	
 5))   35c                     K   t        |       S w)z
    Get all settings
    )r   )rL   rc   s     r-   read_all_settingsr     s      Bs   c                 n   K   t        ||       }|st        t        j                  d|  d      d| dS w)z 
    Delete a setting by ID
    r   z" not found or could not be deletedrg   Tr   )r   r   r   rr   )r   rL   rc   rn   s       r-   remove_settingr     sG      R,G11%j\1ST
 	
 :..r   N)>fastapir   r   r   r   r   r   r	   sqlalchemy.ormr
   typingr   r   r   r   app.common.databaser   app.repositories.settings_repor   services.settings_servicer   r   r   r   r   r   r   r   services.auth_servicer   app.common.modelsr   r   r   pydanticr   r   r    fastapi.responsesr!   dateutilr"   routerr$   r2   r@   rp   rJ   postra   putr)   r   r   r<   intr   r   r   r   deleter   r+   r,   r-   <module>r      s   S S S " , , & 7 ]  ] F ; F F  ' *  		 E t    $  F -. &/888 /8> K"3i&/ 78]
#s(^]
]
 ]
 ]
~  "3i&/ !89+#s(^++ + !+>  ?Fv+0q>05bQ30G W %(*- ! $% c&/ !89	/// 	/ 	/ &/&  &/ !89*
** *  *  K&/ !89      '( &/ !89/// / )/r,   