
    wh                     0   d dl mZmZmZmZmZmZ d dlZd dl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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 d dlmZ d dlZ e         e       Z e       Z ej<                  d      Zej@                  Z ejB                  Z!ejD                  Z"ejF                  Z#ejH                  Z$ ejJ                  e e!e"e#d      Z&ejO                  d       ed      fdede(fd       Z)ejO                  d      defd       Z*y)    )	APIRouterHTTPExceptionDependsQueryRequestHeaderN)urlparse)DictAny)load_dotenv)r   r   r   r   r   )Session)get_dbSessionLocal)settings)
Datasource)process_bright_review_dataWEBHOOK_STATIC_TOKENT)app_idkeysecretclustersslz/webhookrequest_bodyauthorizationc                 |  K   |r|j                  d      st        dd      |j                  d      }t        |      dk  s|d   t        k7  rt        dd      	 | j                          d	{   }t        d
|        t        j                  |       ddiS 7 +# t        $ r}t        dt        |              	 j                  dd      }t        j                  dddddddd       n-# t        $ r!}t        dt        |              Y d	}~nd	}~ww xY wt        ddt        |      i      d	}~ww xY ww)z
    Webhook to receive review data from Bright Data API.
    - Verifies Bearer Token.
    - Sends data to Celery for processing.
    - Sends Pusher notification on failure.
    zBearer i  zMissing Bearer Tokenstatus_codedetail       zInvalid Bearer TokenNz[Webhook Received Data]: messagez/Data received and sent to Celery for processingz[Webhook Error] datasource_idunknownimport-updateprogress-updater   failedzWebhook failed)	processedtotalpercentstatus
status_msg
event_namedataz/[Pusher Error in Webhook Failure Notification]   error)
startswithr   splitlenWEBHOOK_TOKENjsonprintr   delay	Exceptionstrgetpusher_clienttrigger)r   r   token_partsbright_dataer#   
pusher_errs          >/var/www/html/hubwallet-dev/src/mock_bright_data_api/router.pybright_data_api_webhookrC   .   sR      8 8 C4JKK%%c*K
;!{1~>4JKKG(--//)+78 	#((5LMM 0  G Q)*	W'OOOYGM!!,!" &"2 " 
  	WCC
OCTUVV	W Wc!f4EFF+Gsf   AD<B /B0*B D<B 	D9&D4>0C/.D4/	D8DD4DD44D99D<z/notifyrequestc                 d  K   	 | j                          d{   }t        d       t        t        j                  |d             |j                  dd      }|j                  dd      j	                         }|j                  dd      }|j                  d	i       }t        |xs |      }|r	d
}|xs d}n|dv rd}d}nt        d       dd| diS t        j                  dd|ddd||d       dd| iS 7 # t        $ r)}	t        dt        |	              t        dd      d}	~	ww xY ww)zl
    Webhook to receive Bright Data API notifications (success or failure) and forward them via Pusher.
    Nu-   
📩 Received Notification from Bright Data:r    )indentsnapshot_id r+   r1   error_codesr'   zBright Data API failed)readydonesuccessz$Bright Data API fetched successfullyu8   ⚠️ Notification status is unknown or not actionable.r"   zStatus 'z
' ignored.r%   r&   r   )rG   r(   r)   r*   r+   r,   r-   zPusher notification sent: u   ❌ Error in notify webhook: r0   z*Failed to process Bright Data notificationr   )r6   r7   dumpsr;   lowerboolr<   r=   r9   r:   r   )
rD   payloadrG   r+   	error_msgrI   
is_failurefrontend_statusfrontend_status_msgr@   s
             rB   bright_data_notifyrU   d   s[    
+b&>?djj+,kk-4Xr*002KK,	kk-4 )2{3
 &O"+"G/G(('O"HLM&<== 	(*)1 	 	
 77HIJJM 'P  b-c!fX674`aabsE   D0C; C9B:C; D0%C; 8D09C; ;	D-$D((D--D0)+fastapir   r   r   r   r   r   osr6   urllib.parser	   typingr
   r   dotenvr   sqlalchemy.ormr   src.utils.dbr   r   src.utils.settingsr   src.utils.modelsr   src.utils.celery_workerr   pusherrouterbright_data_routergetenvr5   r   r   r   r   
batch_sizePusherr<   postr:   rC   rU        rB   <module>ri      s   M M 	  !   F F " - ' ' >  	[  		01 
ll	


  
  $  0G0G0G %0Gj #/bg /b $/brh   