
    Yji                         d Z ddlZddlZddlZddlmZ ddededefdZddee   defd	Z	ddee   defd
Z
ddee   defdZy)z.
ID Generation utilities for the application.
    N)Optionaltextcode_lengthreturnc                    | j                  dd      }t        |      dk(  r3t        j                  dj	                  fdt        d      D              }t        |      dk\  rC|j                         dd t        j                         j                  dd j                         z   S |t        |      z
  }|j                         t        j                         j                  d| j                         z   S )	zFunction to return a random Alphanumeric String based on a provided text
 
    @Params:
    text: string - The text
    code_length: int - Desired length of code to generate
 
    @Output:
    string
      r   c              3   H   K   | ]  }t        j                          y wNrandomchoice).0iletterss     V/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/helpers/id_generator.py	<genexpr>z-generate_alphanumeric_code.<locals>.<genexpr>   s     J1g 6J   "
      N   )
replacelenstringascii_uppercasejoinrangeupperuuiduuid4hex)r   r   stripped_textnum_chars_to_appendr   s       @r   generate_alphanumeric_coder$      s     LLb)M
=Q((Jb	JJ
=Q##%q+djjl.>.>r.B.H.H.JJJ)C,>>""$tzz|'7'78L9L'M'S'S'UUU    customer_namec                     | rt        | d      }d| S t        j                  t        j                  z   dj	                  fdt        d      D              }d| S )zGenerate a unique customer ID based on customer name or default pattern.
    
    Args:
        customer_name: Optional customer name to base the ID on
        
    Returns:
        A unique alphanumeric customer ID with 'CUS' prefix
       CUSr	   c              3   H   K   | ]  }t        j                          y wr   r   r   _letters_and_digitss     r   r   z'generate_customer_id.<locals>.<genexpr>0   s     RAfmm,>?Rr   r$   r   r   digitsr   r   r&   	base_coderandom_partr-   s      @r   generate_customer_idr3       s]     .}a@	YK   $33fmmCggRqRR[M""r%   c                     | rt        | d      }d| S t        j                  t        j                  z   dj	                  fdt        d      D              }d| S )zGenerate a unique UIN (Universal Identification Number) based on customer name.
    
    Args:
        customer_name: Optional customer name to base the UIN on
        
    Returns:
        A unique alphanumeric UIN with 'UIN' prefix
    r   UINr	   c              3   H   K   | ]  }t        j                          y wr   r   r+   s     r   r   zgenerate_uin.<locals>.<genexpr>D        SAfmm,>?Sr   r.   r0   s      @r   generate_uinr8   4   s]     .}bA	YK   $33fmmCggSrSS[M""r%   merchant_namec                     | rt        | d      }d| S t        j                  t        j                  z   dj	                  fdt        d      D              }d| S )zGenerate a unique UIN for merchants based on merchant name.
    
    Args:
        merchant_name: Optional merchant name to base the UIN on
        
    Returns:
        A unique alphanumeric UIN with 'MUIN' prefix (Merchant UIN)
    r   MUINr	   c              3   H   K   | ]  }t        j                          y wr   r   r+   s     r   r   z(generate_merchant_uin.<locals>.<genexpr>X   r7   r   r.   )r9   r1   r2   r-   s      @r   generate_merchant_uinr=   H   s]     .}bA	i[!! $33fmmCggSrSSk]##r%   )r   r   )__doc__r   r   r   typingr   strintr$   r3   r8   r=    r%   r   <module>rC      s{       VS Vs VC V*# # #(# # #($# $# $r%   