o
    i+                  
   @   s  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	 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 d dlZd dlmZmZ e sWed ed zedZee ed W n ey Z zede  W Y dZ[ndZ[ww d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN d dlOmPZPmQZQmRZR d dlSmTZT d dlUmVZV d dl m!Z!m"Z"m#Z# d dlWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` d dlambZb d dlcmdZd e Zeg dZfeegeVjh eejge	efddgdgd eege e Zieijge	ddgdgd eeje eejkded d!d d" eejle?jmd#d$gd% eejleEjmd&d'gd% eejleCjmd(d)gd% eejleDjmd*d+gd% eejleHjmd,d-gd% eejleKjmd.d-gd% eejleIjmd/d0gd% eejleJjmd1d2gd% eejleGjmd3d4gd% eejleFjmd5d6gd% eejle@jmd7d8gd% eejle@jmd9d:gd% eejle@jmd;d<gd% eejleLjmd=d>gd% eejleAjmd?d@gd% eejleBjmdAdBgd% eejlePjmdCdDgd% eejleMjmdEdFgd% eejleNjmdGdHgd% eejleTjmdIdJgd% eejleRjmdKdLgd% eejle$jmdMdNgd% eejle%jmdOdPgd% eejle&jmdQdRgd% eejle(jmdSdTgd% eejle)jmdUdVgd% eejle*jmdWdXgd% eejle+jmdYdZgd% eejle,jmd[d\gd% eejle"jmd]d^gd% eejle-jmd_d`gd% eejle.jmdadbgd% eejle/jmdcddgd% eejle'jmdedfgd% eejle1jmdgdhgd% eejle5jmdidjgd% eejle0jmdkdlgd% eejle2jmdmdngd% eejle3jmdodpgd% eejle4jmdqdrgd% eejle:jmdsdtgd% eejle;jmdudvgd% eejle<jmdwdxgd% eejle=jmdydzgd% eejle6jmd{d|gd% eejle6jmd}d~gd% eejle7jmddgd% eejle8jmddgd% eejle9jmddgd% eenddefddZoeenddefddZpeenddefddZqeenddefddZreenddefddZseenddefddZteenddefddZueevddd Zweevddd ZxdgZyeezddefddZ{dS )    N)FastAPIRequestHTTPException	WebSocket)RedirectResponse)CORSMiddleware)load_dotenv)InputSanitizationMiddleware)StaticFiles)BaseHTTPMiddleware)r   )start_scheduler)credentials	messagingzSCould not load .env file or it is empty. Please check if it exists and is readable.   zfirebase-key.jsonu.   ✅ Firebase initialized for FCM notificationsu'   ⚠️ Firebase initialization failed: )booking	customersmarketplaceservices	workforceworkforcecategorypricingrulesvehiclesfleetsvendorsworkforcevehicleworkforcetimesheetcustomer_accountstasks	schedulespaymentavailabilityapplinksui
monitoringcommunication
iotdevices	geofencesgeofencerulesgeofence_rule_mappingintegrationslanguage_regionalaccount_settingssubscription)accountssubscriptionssupportsupportcustomerusersroleslogin	dashboardauditrbacappflowpartnerscommoninvoicesactivitycommunication_email)crmcommticket)crud)auth)r   r   r   )	websocket_tracking_datawebsocket_realtime_updatesstart_kafka_producerstop_kafka_producerwebsocket_historical_routewebsocket_workforce_scheduleswebsocket_nearby_deviceswebsocket_historical_and_live!websocket_historical_and_live_all)consume_tracking_data)KafkaConnectionError)zhttp://localhost:3000zhttp://localhost:3001zhttps://www.movex.aizhttp://beta.movex.aizhttps://beta.movex.aizhttps://staging.movex.ai*TrM   )allow_originsallow_credentialsallow_methodsallow_headers)rO   rP   rQ   z/publicpublic)	directory)namez/v1/accountsAccounts)prefixtagsz/v1/authLoginz	/v1/usersUsersz	/v1/rolesRolesz/v1/rbacRBACz
/v1/commonz/v1/appflowAppsz/v1/partnersPartnersz	/v1/auditAuditz/v1/dashboard	Dashboardz/v1/saaszsubscription-typesz/v1/saas/subscribe	subscribez/v1/subscriptionsSubscriptionsz/v1/invoiceszSaaS Invoicesz/v1/supportSupportz/v1/supportcustomerzCustomer Supportz
/v1/cx/crmCRMz/v1/activityActivityz
/v1/emailszCommunication Emailz/v1/crudr@   z
/v1/ticketTicketz/v1/servicesServicesz/v1/workforce	Workforcez/v1/workforcecategoryzWorkforce Categoryz/v1/vehicle-modelsVehiclesz
/v1/fleetsFleetsz/v1/vendorsVendorsz/v1/workforcevehiclezWorkforce Vehiclez/v1/workforcetimesheetzWorkforce Timesheetz/v1/customers	Customersz/v1/customer_accountszCustomer Accountsz	/v1/tasksTasksz/v1/schedules	Schedulesz/v1/pricingruleszPricing Rulesz/v1/availabilityAvailabilityz/v1/communicationCommunicationz/v1/paymentPaymentz/v1/applinksz	App Linksz/v1/uiUIz/v1/monitoring
Monitoringz/v1/integrationsIntegrationsz/v1/language_regionalzLanguage & Regionalz/v1/account_settingszAccount Settingsz/v1/subscriptionSubscriptionz/v1/iotdeviceszIoT Devicesz/v1/withmappingwithmappingz/v1/geofences	Geofencesz/v1/geofenceruleszGeofence Rulesz/v1/geofence_rule_mappingzGeofence Rule Mappingz/ws/tracking_data	websocketc                    s   t d t| I d H  d S )Nu.   🔥 tracking_data_socket called BEFORE accept)printrB   rw    rz    /var/www/html/moveengine/main.pytracking_data_socket   s   r|   z/ws/realtimec                       t | I d H  d S N)rC   ry   rz   rz   r{   realtime_updates_socket      r   z/ws/historical_routec                    r}   r~   )rF   ry   rz   rz   r{   historical_route_socket   r   r   z/ws/historical_and_livec                    r}   r~   )rI   ry   rz   rz   r{   historical_and_live_socket   r   r   z/ws/historical_and_live_allc                    r}   r~   )rJ   ry   rz   rz   r{   historical_and_live_all_socket   r   r   z/ws/workforceschedule-updatesc                    r}   r~   )rG   ry   rz   rz   r{   realtime_updates   r   r   z/ws/nearby-devicesc                    r}   r~   )rH   ry   rz   rz   r{   nearby_devices_socket   r   r   startupc               
      s`   zt  I d H  tt  W n ty& }  ztd|  W Y d } ~ nd } ~ ww t  td d S )Nz-Kafka not available, skipping producer start:u   ✅ APScheduler started)rD   asynciocreate_taskrK   rL   rx   r   )erz   rz   r{   startup_event   s   r   shutdownc                      s   t  I d H  d S r~   )rE   rz   rz   rz   r{   shutdown_event   s   r   z	127.0.0.1httprequestc                    sL   | j j}| jjds| jjdr|tvrtddd|| I d H }|S )Nz/docsz/redoci  	Forbidden)status_codedetail)clienthosturlpath
startswithallowed_ipsr   )r   	call_next	client_ipresponserz   rz   r{   restrict_access   s   r   )|r   fastapir   r   r   r   fastapi.responsesr   fastapi.middleware.corsr   dotenvr   app.middlewarer	   fastapi.staticfilesr
   starlette.middleware.baser   starlette.exceptionsStarletteHTTPExceptionapp.schedulerr   firebase_adminr   r   rx   exitCertificatecredinitialize_app	Exceptionr   app.v1.routers.platformr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   app.v1.routers.saasr-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   app.v1.routers.cxr=   r>   r?   app.v1.routersr@   app.v1.dependenciesrA   app.v1.sockets.tracking_datarB   rC   rD   rE   rF   rG   rH   rI   rJ   app.v1.consumers.kafka_consumerrK   aiokafka.errorsrL   apporiginsadd_middlewareAuthMiddlewareopen_cors_routerexception_handlermountinclude_routerrouterrw   r|   r   r   r   r   r   r   on_eventr   r   r   
middlewarer   rz   rz   rz   r{   <module>   s    

|H,




