
    DiY              	          d Z ddlmZ ddlZddlmZmZmZ ddlZddl	m
Z
mZ ddlmZ ddlmZ  ej                   d      Zdd	Zdddddddd
d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZy)z~
Async HTTP helper for Payrix REST calls using httpx.AsyncClient.

Provides consistent error handling and structured logging.
    )annotationsN)AnyDictOptional)get_payrix_configget_auth_headers)settings)PayrixApiErrorpayrixc                    dD ]#  }| j                   j                  |      }|s!|c S  	 | j                         }dD ]!  }||v st        ||   t              s||   c S  	 y # t
        $ r Y y w xY w)N)zx-request-idzX-Request-Idzx-correlation-idzX-Correlation-Idz
request-id)	requestId
request_idcorrelationIdcorrelation_id)headersgetjson
isinstancestr	Exception)respnamevalbodykeys        R/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/core/payrix/http.py_extract_request_idr      s     	 llt$J	yy{Q 	!Cd{z$s)S9Cy 	!
   s#   A" A" A" A" "	A.-A.g      >@)r   paramsr   merchant_idcustomer_idtokentransaction_idtimeoutc                 K   t               }t               }i ||xs i }t        d|        |j                         dk(  r|j	                  dd       t        d|        |j                  d      r|nd| }t        j                  |j                  |
|      4 d{   }|j                  |j                         |||       d{   }ddd      d{    d	j                  cxk  rd
k  r|S  t        |      }	 |j                         }t        |j                  ||      7 7 b7 T# 1 d{  7  sw Y   dxY w# t        $ r |j                  }Y Jw xY ww)a  
    Perform a Payrix HTTP request with consistent auth, logging, and error mapping.

    Args:
        operation: Logical operation name for logging (e.g., "create_customer")
        method: HTTP method (GET, POST, etc.)
        path: Endpoint path relative to base URL (e.g., "/v2/customers")
        json: Optional JSON body
        params: Optional query params
        headers: Optional additional headers merged with auth headers
        merchant_id, customer_id, token, transaction_id: Logging context fields
        timeout: Request timeout in seconds

    Returns:
        httpx.Response on success (2xx).

    Raises:
        PayrixApiError on non-2xx responses.
    z==============cfg============ GETzContent-TypeNz)==============merged_headers============ /)base_urlr#   r   )r   r      i,  )status_codepayrix_error_bodyr   )r   r   printupperpop
startswithhttpxAsyncClientr'   requestr)   r   r   r   textr
   )	operationmethodpathr   r   r   r   r    r!   r"   r#   cfgbase_headersmerged_headersrel_pathclientr   r   r   s                      r   payrix_requestr;   +   sn    B 
C#%L88B8N	*3%
01 ||~>40	5n5E
FG s+t1TFH   #,,Q_` X Xdj^^FLLNH4PV^WWX X d$$  % %T*JIIK T%5%5Zd
eeAXWX X X X(  yys~   BE" D,!E"$'D2D.D2E"D0'E"E E".D20E"2E8D;9E E"EE"EE")r   httpx.ResponsereturnzOptional[str])r3   r   r4   r   r5   r   r   z
Any | Noner   zDict[str, Any] | Noner   zDict[str, str] | Noner   
str | Noner    r>   r!   r>   r"   r>   r#   floatr=   r<   )__doc__
__future__r   loggingtypingr   r   r   r/   src.core.payrix.configr   r   src.core.configr	   src.core.exceptionsr
   	getLoggerloggerr   r;        r   <module>rK      s   
 #  & &  F $ .			8	$8 $(%)""!%ZfZfZf Zf
 Zf "Zf #Zf Zf Zf Zf Zf Zf ZfrJ   