
    Di                    L    d Z ddlmZ ddlmZmZmZ ddlmZ d	dZ	d
dZ
ddZy)z
Utilities to map Payrix transaction statuses/events into internal enums.

Used by both synchronous flows (charge submissions) and webhook handlers.
    )annotations)AnyDictOptional)TransactionStatusTypesc                \    |D ]'  }| j                  |      }t        |t              s%|c S  y )N)get
isinstancestr)payloadkeyskvs       [/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/core/payrix/status_mapper.py
_get_valuer      s2     KKNaH     c                   t        | ddd      }|r`|j                         }d|v rt        j                  S d|v sd|v sd|v sd|v rt        j                  S d	|v sd
|v sd|v rt        j
                  S t        | ddd      }|rL|j                         }|dv rt        j                  S |dv rt        j                  S |dv rt        j
                  S t        j                  S )z
    Map Payrix webhook/response payload to internal `TransactionStatusTypes`.

    Checks common event keys like `event`, `type`, `eventType` and status keys
    like `status`, `state`, `result`. Fallback is `PENDING`.
    eventtype	eventTypecapturedapprovedpaid	succeededsuccessdeclinedfailederrorstatusstateresult>   r   >   r   r   r   r   >   r   r   r   )r   lowerr   CAPTUREDPAIDFAILEDPENDING)r   
event_typeestatus_valuess        r   (map_payrix_payload_to_transaction_statusr+      s     GWfkBJ?)222?fk[A-=a)...?h!mw!|)000 gx(CL )222<<)...//)000!)))r   c                r    | t         j                  t         j                  fv ry| t         j                  k(  ryy)u   
    Convert internal enum to unified strings for client surfaces.

    - CAPTURED/PAID → "succeeded"
    - FAILED → "failed"
    - PENDING → "processing"
    r   r   
processing)r   r#   r$   r%   )r   s    r   !transaction_status_enum_to_stringr.   5   s7     (113I3N3NOO'...r   N)r   Dict[str, Any]r   r   returnzOptional[str])r   r/   r0   r   )r   r   r0   r   )__doc__
__future__r   typingr   r   r   src.core.utils.enumsr   r   r+   r.    r   r   <module>r6      s(   
 # & & 7*@r   