Ë
    øŒjS  ã                   óZ   — d dl mZ d dlmZ d dlmZ d dlmZ  G d„ de«      Zdede	fd	„Z
y
)é    )ÚRequest)ÚBaseHTTPMiddleware)ÚMutableHeaders)ÚCallablec                   óT   ‡ — e Zd ZdZd
ˆ fd„	Zdedefd„Zdedefd„Z	dedefd	„Z
ˆ xZS )ÚLanguageMiddlewarezÇ
    Middleware to detect and set user's preferred language
    Supports detection from:
    1. Query parameter: ?language=ko
    2. Header: Accept-Language or X-Language
    3. Cookie: language
    c                 óL   •— t         ‰| �  |«       |xs ddg| _        d| _        y )NÚenÚko)ÚsuperÚ__init__Úsupported_languagesÚdefault_language)ÚselfÚappr   Ú	__class__s      €ú2/var/www/html/Fitness-lenito-AI-main/middleware.pyr   zLanguageMiddleware.__init__   s)   ø€ Ü‰Ñ˜ÔØ#6Ò#F¸4À¸,ˆÔ Ø $ˆÕó    ÚrequestÚ	call_nextc              ƒ   ó”   K  — | j                  |«      }||j                  _         ||«      ƒ d{  –—† }||j                  d<   |S 7 Œ­w)z@
        Process request and detect language preference
        NzContent-Language)Údetect_languageÚstateÚlanguageÚheaders)r   r   r   r   Úresponses        r   ÚdispatchzLanguageMiddleware.dispatch   sR   è ø€ ð ×'Ñ'¨Ó0ˆð "*ˆ�‰Ôñ # 7Ó+×+ˆð 08ˆ×ÑÐ+Ñ,àˆð ,ús   ‚.A°A±AÚreturnc                 óŒ  — |j                   j                  d«      }|r|| j                  v r|S |j                  j                  d«      }|r|| j                  v r|S |j                  j                  d«      }|r| j	                  |«      }|r|S |j
                  j                  d«      }|r|| j                  v r|S | j                  S )z�
        Detect user's preferred language from various sources
        Priority: Query param > Header > Cookie > Default
        r   z
X-LanguagezAccept-Language)Úquery_paramsÚgetr   r   Úparse_accept_languageÚcookiesr   )r   r   r   Úaccept_languages       r   r   z"LanguageMiddleware.detect_language%   sÅ   € ð ×'Ñ'×+Ñ+¨JÓ7ˆÙ˜ D×$<Ñ$<Ñ<ØˆOð —?‘?×&Ñ& |Ó4ˆÙ˜ D×$<Ñ$<Ñ<ØˆOð "Ÿ/™/×-Ñ-Ð.?Ó@ˆÙØ×1Ñ1°/ÓBˆHÙØ�ð —?‘?×&Ñ& zÓ2ˆÙ˜ D×$<Ñ$<Ñ<ØˆOð ×$Ñ$Ð$r   r$   c                 ó   — g }|j                  d«      D ]¡  }|j                  «       j                  d«      }|d   j                  «       j                  «       }|j                  d«      d   }d}t        |«      dkD  r(d|d   v r!	 t	        |d   j                  d«      d   «      }|j                  ||f«       Œ£ |j                  d	„ d
¬«       |D ]  \  }}	|| j                  v sŒ|c S  y# t
        t        f$ r d}Y ŒYw xY w)z‡
        Parse Accept-Language header and return best matching language
        Example: 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7'
        Ú,Ú;r   Ú-g      ð?é   zq=Ú=c                 ó   — | d   S )Nr)   © )Úxs    r   Ú<lambda>z:LanguageMiddleware.parse_accept_language.<locals>.<lambda>\   s   €  Q q¢Tr   T)ÚkeyÚreverseN)
ÚsplitÚstripÚlowerÚlenÚfloatÚ
ValueErrorÚ
IndexErrorÚappendÚsortr   )
r   r$   Ú	languagesÚ
lang_entryÚpartsÚ	lang_codeÚ	base_langÚqualityÚlangÚ_s
             r   r"   z(LanguageMiddleware.parse_accept_languageC   s  € ð
 ˆ	à)×/Ñ/°Ö4ˆJØ×$Ñ$Ó&×,Ñ,¨SÓ1ˆEØ˜a™Ÿ™Ó(×.Ñ.Ó0ˆIð "Ÿ™¨Ó,¨QÑ/ˆIð ˆGÜ�5‹z˜AŠ~ $¨%°©(Ñ"2ð"Ü# E¨!¡H§N¡N°3Ó$7¸Ñ$:Ó;�Gð ×Ñ˜i¨Ð1Õ2ð 5ð$ 	�‰™>°4ˆÔ8ó !‰GˆD�!Ø�t×/Ñ/Ò/Ø’ð !ð øô #¤JÐ/ò "Ø!’Gð"ús   Â C)Ã)C=Ã<C=)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   Ústrr   r"   Ú__classcell__)r   s   @r   r   r      sF   ø„ ñõ%ð
 gð ¸(ó ð"% wð %°3ó %ð< °Sð  ¸S÷  r   r   r   r   c                 ó0   — t        | j                  dd«      S )z<
    Helper function to get language from request state
    r   r
   )Úgetattrr   )r   s    r   Úget_language_from_requestrJ   f   s   € ô �7—=‘= *¨dÓ3Ð3r   N)Úfastapir   Ústarlette.middleware.baser   Ústarlette.datastructuresr   Útypingr   r   rF   rJ   r,   r   r   Ú<module>rO      s4   ðÝ Ý 8Ý 3Ý ô]Ð+ô ]ð@4 wð 4°3ô 4r   